【发布时间】:2015-06-04 09:43:30
【问题描述】:
我有一个非常典型的 docker-compose 设置:一个自定义 Web 容器和一个直接来自 docker hub 的数据库容器。为了开发,我的主机目录被挂载到 web docker 中,这样我每次做一个小改动时就不必重新构建容器。 Web 服务器是一个为 ruby 应用程序提供服务的乘客(独立)。
当我运行它时,我的数据库正在运行,我的 Web 服务正在运行(在端口 3000 上),一切都很好。但是,如果我进行更改,则不会发生任何变化,因为需要重新启动 Web 服务器(乘客)。我希望能够启动一个简单的轻量级开发服务器,例如thin,当我进行更改时我会手动重新启动它。
我尝试了什么:
- 启动新的 Web 容器 (
docker-compose run web ...) 不会为新容器公开任何端口。所以,我无法连接到网络服务器。 - 直接使用 Docker 启动新的 Web 容器 (
docker run web -p 5000:5000 image_name ...)。我们失去了 docker-compose 功能,容器在没有手动绑定的情况下不会链接到数据库。 - 每次都重新启动 docker-compose(因为它启动很快)。每次我的数据库重新启动时都是空的,我需要继续运行。
- 使用
--service-portsarg:由于端口3000已被使用,因此无法使用 -
docker execweb 容器上的我的开发服务器:必须在另一个端口上运行,所以不会暴露。 -
docker exec我的网络服务器的kill:实际上它可以工作(它重新启动),但我不太喜欢这个解决方案。首先,因为服务器仍然是Passenger,我更喜欢轻量级的Web服务器(如thin)。其次,我发现使用docker exec ...反复杀死服务器不是很干净。 - 更改我的
Dockerfile以将Passenger 替换为自动重新启动的开发Web 服务器:我喜欢Dockerfile与产品服务器、测试和开发服务器上的相同。
您是否有一种干净简单的方法来启动我的 Web 容器,并打开端口 5000,我将在该容器上启动/重新启动开发 Web 服务器?
【问题讨论】:
-
我刚刚将所有源代码移动到一个数据容器中,该容器使用 SMB 导出给开发人员。我为此编写了 Docker Shell - dockershell.io.
标签: docker docker-compose