是否有可能在同一台机器上启动多个docker守护进程

如果可能的话,你将如何configuration每个守护进程 – graphics位置,图像位置等?

是的,即使没有Docker Machine,也可以在单个主机上运行两个Docker守护进程。 从Docker 1.9.1开始,如果两个守护进程使用默认值,那么以下docker daemon标志将会导致冲突:

  -b, --bridge= Attach containers to a network bridge --exec-root=/var/run/docker Root of the Docker execdriver -g, --graph=/var/lib/docker Root of the Docker runtime -H, --host=[] Daemon socket(s) to connect to -p, --pidfile=/var/run/docker.pid Path to use for daemon PID file 
  • --bridge的默认值是docker0 ,如果你没有使用默认值,你必须手动创build和configuration网桥(Docker不会为你创build/pipe理)。 下面更多细节。

  • --exec-root=/var/run/docker是存储容器状态的地方。

  • --graph=/var/lib/docker是存储图像的地方。

  • --host=[]指定Docker守护进程将侦听客户端连接的位置。 如果未指定,则默认为/var/run/docker.sock

  • --pidfile=/var/run/docker.pid是守护进程的进程ID存储位置。

所以,只要你的两个守护进程为这些标志使用不同的值,你可以在同一个主机上运行它们。 示例脚本(包括networking设置):

 #!/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 brctl addbr $bridge sudo ip addr add ${net:-"10.20.30.1/24"} dev $bridge sudo ip link set dev $bridge up fi sudo docker daemon \ --bridge=$bridge \ --exec-root=$base.exec \ --graph=$base.graph \ --host=unix://$base.socket \ --pidfile=$base.pid 

用法示例:

 ## 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 -it alpine sh / # echo hereiam hereiam 

好问题! 可以在一个容器中启动一个Docker守护进程。 在那个容器里,你将能够启动更多的容器。 这样你可以在同一台主机上运行不同设置的docker守护进程。

签出这个项目: https : //github.com/jpetazzo/dind 。 它提供了一个包含Docker本身的Docker镜像,就像你需要的一样。

是的,这可以通过使用Docker机器来实现

使用这个,你可以创build多个docker守护进程并在它们之间切换。