我想用一个命令启动数百个容器。
a
,然后在启动时运行a.rb
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
答案 0 :(得分:2)
首先,从Dockerfile构建的图像必须包含a/r.rb
和b/b.rb
这意味着Dockerfile有2个COPY
指令,包含这些脚本。
由于您只需要一个 Dockerfile,生成一个图像,因此您应该在其中包含COPY start.sh
脚本和CMD start.sh
指令。该脚本(现在包含在图像中)将根据环境变量运行a/r.rb
或b/r.rb
(例如MUSTRUN
)。
docker run -e MUSTRUN=a myimage
or
docker run -e MUSTRUN=b myimage
请注意,r.rb
脚本退出后,您的容器将停止运行
为了让它保持运行,您需要更改start.sh
以便无限循环,有点像“A Daemonized Hello world”。