我怎么能一次启动多个容器共享一个Dockerfile

时间:2015-06-12 06:58:45

标签: docker docker-compose

我想用一个命令启动数百个容器。

容器A会将目录更改为a,然后在启动时运行a.rb

容器B会将目录更改为b,然后在启动时运行b.rb

  

Container ...会将目录更改为...,然后在启动时运行....rb

所有这些容器应该共享相同的Dockerfile。

我需要切换到correspoding文件夹然后执行脚本

但我收到了错误

  

无法执行:exec:" cd":$ PATH中找不到可执行文件

  a:
    build: .
    command: cd a ; ruby a.rb
    volumes:
        - .:/crawler
    ports:
      - 5901:5901
  b:
    build: .
    command: cd b ; ruby b.rb
    volumes:
        - .:/crawler
    ports:
      - 5902:5902

1 个答案:

答案 0 :(得分:2)

首先,从Dockerfile构建的图像必须包含a/r.rbb/b.rb 这意味着Dockerfile有2个COPY指令,包含这些脚本。

由于您只需要一个 Dockerfile,生成一个图像,因此您应该在其中包含COPY start.sh脚本和CMD start.sh指令。该脚本(现在包含在图像中)将根据环境变量运行a/r.rbb/r.rb(例如MUSTRUN)。

docker run -e MUSTRUN=a myimage
or 
docker run -e MUSTRUN=b myimage

请注意,r.rb脚本退出后,您的容器将停止运行 为了让它保持运行,您需要更改start.sh以便无限循环,有点像“A Daemonized Hello world”。