ben*_*izi 35
是的,即使没有Docker Machine,也可以在一台主机上运行两个Docker守护进程.从Docker 18.09.0-ce开始,dockerd如果两个守护进程使用默认值,则以下标志可能会导致冲突:
-b, --bridge string Attach containers to a network bridge
--exec-root string Root directory for execution state files (default "/var/run/docker")
--data-root string Root directory of persistent Docker state (default "/var/lib/docker")
-H, --host list Daemon socket(s) to connect to
-p, --pidfile string Path to use for daemon PID file (default "/var/run/docker.pid")
Run Code Online (Sandbox Code Playgroud)
默认为--bridgeis docker0,如果您没有使用默认值,则必须手动创建和配置网桥(Docker不会为您创建/管理它).更多细节如下.
--exec-root是存储容器状态的位置(默认值:) /var/run/docker.
--data-root是存储图像的位置(默认值:) /var/lib/docker.
--host指定Docker守护程序将侦听客户端连接的位置.如果未指定,则默认为/var/run/docker.sock.
--pidfile是存储守护程序的进程ID的位置(默认值:) /var/run/docker.pid.
因此,只要您的两个守护程序对这些标志使用不同的值,您就可以在同一主机上运行它们.示例脚本(包括网络设置):
#!/bin/sh
## name: altdocker.sh
set -e -x
: ${bridge=altdocker}
: ${base=$HOME/$bridge}
# Set up bridge network:
if ! ip link show $bridge > /dev/null 2>&1
then
sudo ip link add name $bridge type bridge
sudo ip addr add ${net:-"10.20.30.1/24"} dev $bridge
sudo ip link set dev $bridge up
fi
sudo dockerd \
--bridge=$bridge \
--data-root=$base.data \
--exec-root=$base.exec \
--host=unix://$base.socket \
--pidfile=$base.pid
Run Code Online (Sandbox Code Playgroud)
用法示例:
## in one terminal
$ env net=10.9.8.7/24 /bin/sh altdocker.sh
# ... log output ...
## in another terminal
$ docker -H unix://$HOME/altdocker.socket run --rm -i -t alpine sh
/ # echo hereiam
hereiam
Run Code Online (Sandbox Code Playgroud)
更新了从Docker 1.9.1到18.09.0-ce的更改,以防任何人使用非常旧的版本:
???????????????????????????????
? 1.9.1 ? 18.09.0-ce ?
???????????????????????????????
? docker daemon ? dockerd ?
? -g / --graph ? --exec-root ?
???????????????????????????????
Run Code Online (Sandbox Code Playgroud)
好问题!可以在容器内启动Docker守护程序.在该容器中,您将能够启动更多容器.这样,您可以在同一主机上运行具有不同设置的docker守护程序.
签出这个项目:https://github.com/jpetazzo/dind.它提供了一个包含Docker本身的Docker镜像,就像您需要的那样.
| 归档时间: |
|
| 查看次数: |
9316 次 |
| 最近记录: |