使用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
覆盖这个。