如何一次启动多个容器共享一个Dockerfile
我想用一个命令启动数百个容器 容器A将目录更改为如何一次启动多个容器共享一个Dockerfile,docker,docker-compose,Docker,Docker Compose,我想用一个命令启动数百个容器 容器A将目录更改为A,然后在启动时运行A.rb 容器B将目录更改为B,然后在启动时运行B.rb 容器。。。将目录更改为…,然后在启动时运行…rb 所有这些容器应共享同一Dockerfile 我需要切换到相应的文件夹,然后执行脚本 但我犯了个错误 未能执行:exec:“cd”:在$PATH中找不到可执行文件 首先,从Dockerfile构建的映像必须包括a/r.rb和b/b.rb 这意味着Dockerfile有2个COPY指令来包含这些脚本 因为您只需要一个Dock
A
,然后在启动时运行A.rb
容器B将目录更改为B
,然后在启动时运行B.rb
容器。。。将目录更改为…
,然后在启动时运行…rb
所有这些容器应共享同一Dockerfile
我需要切换到相应的文件夹,然后执行脚本
但我犯了个错误
未能执行:exec:“cd”:在$PATH中找不到可执行文件
首先,从Dockerfile构建的映像必须包括
a/r.rb
和b/b.rb
这意味着Dockerfile有2个
COPY
指令来包含这些脚本
因为您只需要一个Dockerfile,生成一个图像,所以应该在其中包含COPY start.sh
脚本和CMD start.sh
指令。根据环境变量运行a/r.rb
或b/r.rb
的脚本(现在包含在图像中)(例如MUSTRUN
)
请记住,一旦r.rb
脚本退出,您的容器就会停止。要保持它运行,您需要更改
start.sh
,以便无限循环,有点像“”。您尝试过什么吗?
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
docker run -e MUSTRUN=a myimage
or
docker run -e MUSTRUN=b myimage