【问题标题】:Deploying docker-compose containers部署 docker-compose 容器
【发布时间】:2017-01-26 10:55:46
【问题描述】:

我正在尝试部署一个使用 docker-compose 构建的应用,但感觉好像我的方向完全错误。

  1. 我的一切都在本地运行——docker-compose up 使用适当的网络和主机启动我的应用程序。
  2. 我希望能够在生产机器上运行相同的容器和网络配置,只需使用不同的 .env 文件。

我当前的工作流程如下所示:

docker save [web image] [db image] > containers.tar
zip deploy.zip containers.tar docker-compose.yml
rsync deploy.zip user@server

ssh user@server
unzip deploy.zip ./
docker load -i containers.tar

docker-compose up

此时,我希望能够在 docker-compose up 到达那里时再次运行,但这会尝试按照 docker-compose.yml 文件重建容器。

我有一种明显的感觉,我错过了一些东西。我是否应该交付完整的应用程序,然后在服务器上构建图像?如果您从注册表存储/加载图像,您将如何启动组合容器?

【问题讨论】:

  • 我没有看到任何与 D 相关的内容?
  • @Bauss 很好,只是在输入 docker 标签时打错了。
  • 我不明白,你说 docker-compose 试图从 docker-compose.yml 重建容器,除非有人用--build 调用docker-compose up,否则这是没有意义的。我唯一的想法是在你的产品框中docker images 并检查图像名称和标签是否与 docker-compose.yml 中的匹配。
  • @Stratos 我认为问题在于 docker 图像在 tar 文件中的docker load 之后不再有标签。
  • @DanPrince 这是我的怀疑,一切都解决了吗?

标签: docker docker-compose


【解决方案1】:

问题是我在开发和生产中使用了相同的 docker-compose.yml 文件。

应用程序服务没有指定存储库名称或标记,所以当我在服务器上运行docker-compose up 时,它只是尝试在我的应用程序的源代码目录中构建 Dockerfile(服务器上不存在) .

我最终通过向我的本地 docker-compose.yml 添加显式图像字段来解决问题。

version: '2'
services:
  web:
    image: 'my-private-docker-registry:latest'
    build: ./app

然后为生产创建了一个替代 compose 文件:

version: '2'
services:
  web:
    image: 'my-private-docker-registry:latest'
    # no build field!

在本地运行docker-compose build 后,使用存储库名称my-private-docker-registry 和标签latest 构建Web 服务映像。

那么就只是将镜像推送到仓库的情况了。

docker push 'my-private-docker-registry:latest'

在运行 docker pull 时,可以安全地停止并重新创建正在运行的容器以及新图像。

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2021-07-05
    • 2021-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多