Docker FAQ总结整理(二)

简介: 说明:docker 小写是指Docker系统的命令行工具。Docker 大写是指Docker软件系统。image 镜像,就量个软件包,除操作系统内核外的,包括系统库,应用软件,启动配置等,创建后只读。container 是指Docker启动一个镜像后的运行结果,相当于在image基础上写盘产生的增量。

是否可以在活Docker container中公开端口?


不能通过Docker来执行此项, 但您可以从主机上访问容器的未公开端口。

如果您有一个容器, 它的端口8000上运行的东西, 您可以运行

wget http://container_ip:8000

查看 ip 地址, 运行以下两个命令:

docker ps
docker inspect container_name | grep IPAddress

在内部, Docker shell在运行 image 镜像时调用 iptables, 因此可能会对此进行一些更改。

要在 localhost 的8001端口上公开容器的端口 8000, 请执行以下操作:

iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000

可以解决这一问题的一种方法是, 使用所需的端口映射设置另一个容器, 并比较 iptables -save 命令的输出 (不过, 必须删除一些其他选项, 强制通过Docker代理进行通信)。


注意: 这是在颠覆Docker使用方式, 所以应该小心使用, 它可能会创造蓝色烟雾

另一种选择, 是看-P 选项(0.6.6之后版本?),这将使用随机的主机端口, 然后将这些连接起来。

通过 0.6.5, 您可以使用链接--link功能来搞一个新的容器, 它与现有的容器形成一个对话, 并用 -p 可以额外导出端口(链接的使用可以参考这个链接 http://blog.csdn.net/zhangyif... ),使用了link机制后,可以通过指定的名字来和目标容器通信,这其实是通过给/etc/hosts中加入名称和IP的解析关系来实现的

与docker 0.11?您可以使用 docker run --net=host。要将容器直接附加到主机的网络接口, 因此在容器中打开的所有端口都将被暴露。

https://stackoverflow.com/que...


将文件从主机复制到 Docker 容器


cp 命令可用于复制文件。可以复制一个特定的文件, 如:

docker cp foo.txt mycontainer:/foo .txt
docker cp mycontainer:/foo foo.txt

文件夹 src 包含的多个文件可以使用以下方法复制到目标文件夹中:

docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target



在1.8 之前的Docker版本中, 仅有可能将文件从容器复制到主机。不能从主机到容器。

参考:

https://stackoverflow.com/que...


如何在Docker容器中装载主机目录?


有几种方法可以做到这一点。最简单的方法是使用 Dockerfile ADD命令, 如下:

ADD . /path/inside/docker/container

但是, 在生成 Dockerfile 后, 主机上对此目录所做的任何更改都不会显示在容器中。这是因为在生成容器时, Docker将目录压缩为.tar文件, 并将该上下文永久地上载到容器中。

第二种方法是装载卷。为尽可能便于移植, 因此不能将主机目录固化地映射到 dockerfile 中的 Docker 容器目录, 因为主机目录可以根据运行的计算机而更改。要将主机目录映射到 Docker 容器目录, 在使用 Docker 运行时, 您需要使用 -v 选项:

docker run -v /host/directory:/container/directory -other -options image_name command_to_run


参考:

https://stackoverflow.com/que...


如何在不通过仓库的情况下将Docker镜像从一个主机复制到另一个宿主?


您需要将Docker 镜像保存为 tar 文件:

docker save -o <save image to path> <image name>

然后将您的图像复制到一个具有常规文件传输工具 (如 cp 或 scp) 的新系统中。之后, 您必须将图像加载到Docker中:

docker load -i <path to image tar file>

PS: 您可能需要 sudo 执行命令

参见:

https://stackoverflow.com/que...


如何进入Docker container?


docker attach可以连接到你的docker容器, 但这与 ssh 并不完全相同。例如, 如果你的容器运行的是网络服务器, 则 docker attach可能会连接到 web 服务进程的标准输出。它不一定会给你一个shell。

docker exec 命令可能是你要查找的内容;这将允许你在现有容器内运行任意命令。例如:

docker exec -it <mycontainer> bash

当然, 任何正在运行的命令都必须存在于容器文件系统中。

在上面的命令 <mycontainer> 是目标容器的名称或 ID。你是否使用Docker是不重要的;只需运行 docker ps, 并使用 ID (在第一列中显示的十六进制字符串) 或名称 (显示在最后一列中)。例如, 给定:

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web

           


可以运行:

$ docker exec -it web ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
18: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
    valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
    valid_lft forever preferred_lft forever


同样效果也以通过下面指令达到:

$ docker exec -it d2d4a89aaee9 ip addr

类似地也可以在容器里启动一个shell;

$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$


参考:

https://stackoverflow.com/que...

相关文章
|
Docker 容器
Docker学习总结(四)
Docker学习总结(四)
143 0
|
Ubuntu Java 关系型数据库
Docker学习总结(三)
Docker学习总结(三)
108 0
|
关系型数据库 MySQL 数据管理
Docker学习总结(二)
Docker学习总结(二)
128 0
|
应用服务中间件 Linux Shell
Docker学习总结(一)
Docker学习总结(一)
138 0
|
关系型数据库 MySQL 应用服务中间件
docker 常用命令总结
docker 常用命令总结
|
存储 关系型数据库 MySQL
Docker——Docker Compose总结
 Docker Compose 是一种工具,用于帮助定义和共享多容器应用程序。 通过 Compose,你可以创建 YAML 文件来定义服务,并且只需一个命令,就可以启动或清理所有内容。
258 0
|
关系型数据库 Shell 数据库
Docker——Dockerfile总结
 Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
107 0
|
Ubuntu 关系型数据库 MySQL
微服务之Docker知识点总结(三)
微服务之Docker知识点总结()
116 0
微服务之Docker知识点总结(三)
|
关系型数据库 MySQL 应用服务中间件
微服务之Docker知识点总结(二)
微服务之Docker知识点总结
96 0
微服务之Docker知识点总结(二)
|
Ubuntu NoSQL 关系型数据库
微服务之Docker知识点总结(一)
微服务之Docker知识点总结
137 0
微服务之Docker知识点总结(一)