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

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

问题是我不需要Web容器来运行服务器本身。 为此,我需要执行/etc/bash与所有依赖的容器创build后,在Web容器内的选项。 那就是为什么,我的web容器的dockerfile结束于:

 CMD /bin/true 

很明显,这样的容器不会运行,所以我不能使用水手

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

以“input”它并运行node app.js或一些其他任务。

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

顺便说一句,当然,我可以手动启动一个单独的Web容器

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

但是在这种情况下,我需要在每次打算开发应用程序时将所有链接,env vars,卷等附加为附件。

看起来docker-compose run将成为你的朋友。 从docker撰写文件 :

对服务运行一次性命令。 例如,以下命令启动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时映射端口。

--rm docker run一样,你也可以使用--rm选项来删除容器。

如果你的图像使用了ENTRYPOINT ,你应该考虑在你docker-compose.yml中用entrypoint: /bin/bash覆盖这个。