我有一个非常典型的docker-compose设置:一个自定义Web容器和一个直接来自docker hub的数据库容器。对于开发,我的主机目录被挂载到Web docker中,这样我每次做一个小的更改时都不必重建容器。 Web服务器是一个服务于ruby应用程序的Passenger(独立)。
当我运行它时,我运行了数据库,运行了我的Web服务(在端口3000上),一切都很好。但是,如果我进行更改,则无需更改因为Web服务器(乘客)需要重新启动。我希望能够启动一个简单的轻量级开发服务器,例如thin
,我会在进行更改时手动重启。
我尝试了什么:
docker-compose run web ...
)不会公开新容器的任何端口。所以,我无法连接到网络服务器。docker run web -p 5000:5000 image_name ...
)。我们放弃了docker-compose功能,没有手动绑定,容器没有链接到数据库。--service-ports
arg:不能使用端口3000已经使用docker exec
我的Web服务器上的开发服务器:必须在另一个端口上运行,因此不会暴露。docker exec
我的网络服务器的kill
:实际上它可以正常运行(重启),但我真的不喜欢这个解决方案。首先,因为服务器仍然是Passenger,我更喜欢轻量级的Web服务器(如thin
)。其次,我发现使用docker exec ...
连接到服务器上进行杀戮并不是很干净。Dockerfile
以替换Passenger:我喜欢Dockerfile
与prod服务器,测试和开发人员相同。 您是否有一个干净简单的方法来启动我的Web容器,打开端口5000,我将在其上启动/重新启动开发Web服务器?
答案 0 :(得分:3)
我使用两个docker-compose文件,一个用于开发,一个用于生产。
在开发docker-compose文件时,您可以使用CMD
覆盖Dockerfile中的command
,这样您就可以轻松地使用bash
来拥有shell或使用自动重新启动服务器。 / p>
使用自定义docker-compose文件执行:docker-compose -f dev.yml ...
为此:
每次重新启动docker-compose(快速启动时)。每次我的数据库重新启动时都是空的,我需要继续运行。
如果你执行docker-compose up --no-deps web
,它将不会重新启动你的数据库