我有一个船坞式作曲。Yml文件包含4个容器:redis, postgres, API和worker。

在工作容器的开发过程中,我经常需要重新启动它以应用更改。有没有什么好方法可以在不重启其他容器的情况下重启单个容器(例如worker) ?


当前回答

要重新启动一个更改的服务,以下是我执行的步骤:

docker-compose stop -t 1 worker
docker-compose build worker
docker-compose up --no-start worker
docker-compose start worker

其他回答

下面的命令

docker-compose restart worker

将只是停止和启动容器。也就是说,无需从docker-compose.xml中加载任何更改

STOP类似于PC中的休眠。因此,停止/启动将不会查找配置文件中的任何更改。为了从容器的recipe (docker-compose.xml)中重新加载,我们需要删除并创建容器(类似于重新启动PC)

命令如下所示

docker-compose stop worker       // go to hibernate
docker-compose rm worker        // shutdown the PC 
docker-compose create worker     // create the container from image and put it in hibernate

docker-compose start worker //bring container to life from hibernation

要重新启动一个更改的服务,以下是我执行的步骤:

docker-compose stop -t 1 worker
docker-compose build worker
docker-compose up --no-start worker
docker-compose start worker

答案在这里讨论的是对docker-compose变化的反映。yml文件。

但是,如果我想将我在代码中所做的更改合并到一起,并且我相信这只有通过重建映像才能实现,并且我使用以下命令

1. Docker容器停止

docker stop container-id

2. Docker容器移除

docker rm container-id

3.Docker图像移除

docker rmi image-id

4. 重新组合容器

docker-compose up container-name

由于其他一些答案包含关于重新构建的信息,并且我的用例也需要重新构建,所以我有一个更好的解决方案(与那些相比)。

仍然有一种方法可以轻松地在一行中只针对一个工作容器进行重建+重启,尽管它实际上不是一个命令。对我来说,最好的解决方案就是重建和重启:

docker-compose build worker && docker-compose restart worker

这同时实现了我的两个主要目标:

目标是单个工作者容器 在一行中重新构建和重新启动它

希望这能对大家有所帮助。

在进行更改之后,您需要将更改拉入服务器,然后重新创建容器。如文档所示:

docker-compose pull worker && docker-compose up -d --no-deps worker

Pull worker将只将这个项目拉到服务器,而——no-deps将防止重新启动工作者容器所依赖的容器。