docker-compose的开发工作stream程:运行dev-version容器

我有一个非常典型的docker-compose setup:一个自定义的web容器和一个直接来自docker hub的数据库容器。 对于开发,我的主机目录被挂载到Web泊坞窗,所以我不必每次做一个小小的改变重build容器。 Web服务器是一个Passenger(独立)服务一个ruby应用程序。

当我运行它,我有我的数据库运行,我的Web服务运行(端口3000),都很好。 但是,如果我做了一个改变,没有什么变化,因为Web服务器(乘客)需要重新启动。 我希望能够启动一个简单的轻量级开发服务器,例如我会在进行更改时手动重新启动。

我试过的:

  • 启动一个新的Web容器( docker-compose run web ... )不会公开新容器的任何端口。 所以,我无法连接到Web服务器。
  • 用Docker直接启动一个新的Web容器( docker run web -p 5000:5000 image_name ... )。 我们放弃docker-composefunction,容器没有手动绑定链接到数据库。
  • 每次重新启动docker构成(快速启动)。 每次我的数据库都重新启动的时候,我需要继续运行。
  • 使用--service-ports arg:不起作用,因为已经使用了端口3000
  • docker exec我的开发服务器上的Web容器:必须在另一个端口上运行,所以不会被暴露。
  • docker exec kill我的networking服务器:实际上它工作(重新启动),但我不太喜欢这个解决scheme。 首先,因为服务器仍然是乘客,我更喜欢一个轻量级的Web服务器(如thin )。 其次,我发现它不是很干净连接杀死docker exec ...的服务器与docker exec ...
  • 更改我的Dockerfile以通过自动重新启动的开发Web服务器来取代Passenger:我喜欢Dockerfile与prod服务器,testing和dev上的相同。

你会有一个简单的方法启动我的Web容器,打开5000端口,我将启动/重新启动一个开发Web服务器的shell?

我使用两个docker-compose文件,一个用于开发,一个用于生产。

在开发docker-compose文件的时候,你可以使用command从Dockerfile中覆盖CMD ,这样你就可以很容易的使用bash来创build一个shell或者使用一个自动重启服务器。

要使用你自定义的docker-compose文件吗: docker-compose -f dev.yml ...

为此:

每次重新启动docker-compose(快速启动)。 每次我的数据库都重新启动的时候,我需要继续运行。

如果你做docker-compose up --no-deps web它不会重新启动你的数据库