【问题标题】:Docker compose with up command recreate image unintentionallyDocker compose 使用 up 命令无意中重新创建图像
【发布时间】:2018-09-12 20:09:21
【问题描述】:

在 docker-compose.yml 中有两个服务。那些从存储库中获取图像。

第一次使用docker-compose up -d 启动服务。它工作得很好,一段时间后,由于 Docker 更新和重新启动,图像停止了。

然后,docker start 只启动了其中一个图像。它运行良好,经过另一次更新和重启(几个月后),docker-compose up -d 被执行。在这种情况下,先前手动启动的服务被重新创建并且数据丢失了。一是这能恢复吗,二是这是意料之中的吗?

谢谢

【问题讨论】:

  • 虽然我接受了唯一的答案,但还有更长的解释。如果未更改,命令“docker-compose up -d”不应重新创建服务,特别是如果未完成拉取,则获取服务的更改版本。无论如何,这是一个复杂的情况,我希望你不要陷入其中,但要保持简单。
  • 你也可以分享你收集到的知识并回答你自己的问题

标签: docker docker-compose


【解决方案1】:

您的数据丢失是意料之中的事。您需要将一个“卷”安装到您的容器中,并将您的数据存储在该卷中以保留它。这样,您是否销毁容器或使用完全不同的容器都没有关系。你总是可以挂载你的数据卷,你很好。 https://docs.docker.com/storage/volumes/ 如果有恢复的方法?我真的不这么认为,但我不是 100% 确定...

也可以检查一下,以便更清楚地了解为什么容器第二次重建What is the difference between docker-compose up and docker-compose start?

【讨论】:

  • 你没有注意到我写的是 'docker start' 而不是 'docker-compose start'。这意味着我只使用了 compose 中的一项服务。然后当 Docker 重新启动时,所有服务都使用 docker-compose up 启动。也许最后一个 'docker-compose up' 注意到本地服务之一的图像被修改并重新创建了它,但我没想到它会这样,尤其是我没有登录到存储库。
  • @zhrist 我确实注意到了,但这与你启动它的方式无关。如第二个链接中所述。引用:By default, if there are existing containers for a service, docker-compose up will stop and recreate them (preserving mounted volumes with volumes-from), so that changes in docker-compose.yml are picked up. If you do not want containers stopped and recreated, use docker-compose up --no-recreate. This will still start any stopped containers, if needed.
  • 此引用是相关的:docker-compose up '如果服务存在现有容器,并且服务的配置或映像在容器创建后发生更改,则 docker-compose up 通过停止和重新创建容器(保留已安装的卷)。 ' 这是我的出发点,形象没有改变。最重要的是镜像没有改变,docker-compose 无法连接到镜像所在的注册表,所以它不应该重新创建它,原因有两个。
【解决方案2】:

这里的结论是,使用docker-compose up -d,您将始终在容器内丢失数据。如果容器停止,并且您使用docker-compose start,那么容器内的数据将像以前一样继续。这里的数据是指容器内的数据,而不是卷上的数据。这可以是日志、其他应用程序数据等。

因此,如果需要保留数据,请使用卷,因为有时如果容器有可恢复的错误并且无法启动/重新启动,您将丢失内部的数据/文件。您将不得不重新构建/docker-comopose up。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多