2015-09-05 17 views
6

我正在使用docker-compose为开发。在这个过程中,我经常需要构建5个容器(1个用于web服务器,4个用于postgres,redis,mongo等)。 Web服务器容器配置为包含其他容器的链接,它具有自己的ENV变量,来自开发主机的已安装卷。使用docker-compose构建容器,但稍后使用-it选项运行/ etc/bash?

问题是我不需要web容器来运行服务器本身。这是我需要执行/etc/bash-it选项内的Web容器,所有依赖容器创建后。这就是为什么,我对Web容器dockerfile结尾:

CMD /bin/true 

显然,这种容器不会在运行,所以我不能用像水木清华

docker exec -it <CONTAINER ID> /bin/bash 

为“输入”并运行node app.js或一些其他任务。

任何方式来构建容器作为docker-compose.yml文件的一部分,但后来用-it选项运行/ etc/bash?

BTW,我当然可以手动启动独立的Web容器与

docker run \ 
--link postgres 
--link ... 
-e "NODE_ENV=development" \ 
-e ... \ 
... 
... 
.. 

,但这种情况下,我需要追加的各个环节,ENV瓦尔,体积等作为变元的,每次我要去开发应用程序。

+0

你能解释一下你的用例/工作流程吗?似乎不必要的复杂? – johnharris85

回答

12

看起来像docker-compose run将成为你的朋友。从docker compose docs

对服务运行一次性命令。例如,以下命令启动Web服务并将bash作为其命令运行。

$ docker-compose run web bash

命令docker-compose run <service-name>还确保所有需要的容器(例如那些提供体积和链接)将之前的容器<service-name>启动,如果它们尚未运行。

如果您使用任何端口映射,您可能会考虑使用docker-compose run --service-ports <service-name>。如果没有该选项,docker-compose只会在使用docker-compose up时映射端口。

docker run一样,您也可以使用--rm选项在完成处理后移除容器。

如果您的图片使用ENTRYPOINT,您应该考虑在docker-compose.yml中用entrypoint: /bin/bash覆盖此内容。

+0

谢谢Jan,但不是我所需要的,但是我找到了一个解决方案。我会尽量在几天后发布。 – f1nn

+0

谢谢,这对我很好。 –

相关问题