使用docker-compose构建容器,但稍后使用-it选项运行/ etc / bash?

时间:2015-09-05 17:36:55

标签: docker boot2docker dockerfile docker-compose

我使用docker-compose进行开发。在这个过程中,我经常需要构建5个容器(1个用于web服务器,4个用于postgres,redis,mongo等)。 Web服务器容器配置为包含其他容器的链接,它具有自己的ENV vars,从开发主机安装的卷。

问题是我不需要Web容器来运行服务器本身。在创建所有相关容器之后,我需要在web容器内执行/etc/bash -it个选项。这就是为什么,我的web容器的dockerfile结束于:

CMD /bin/true

显然,这样的容器不会运行,所以我不能使用smth

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

to&#34;输入&#34;它并运行node app.js或其他一些任务。

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

顺便说一句,当然我可以用

手动启动一个单独的Web容器
docker run \
--link postgres
--link ...
-e "NODE_ENV=development" \
-e ... \
...
...
..

但是在这种情况下,我需要在每次开发应用程序时附加所有链接,环境变量,卷等等。

1 个答案:

答案 0 :(得分: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.ymlentrypoint: /bin/bash中覆盖此图片。