【问题标题】:docker-compose does not start the specified stagedocker-compose 不启动指定阶段
【发布时间】:2021-09-03 09:50:03
【问题描述】:

我正在尝试创建一个多阶段 Dockerfile,其中第一阶段旨在在开发环境(简单​​的开发服务器)中启动,第二阶段旨在用于生产(全尺寸 Web 服务器)。

FROM python:3.9-alpine3.14 as develop
...
CMD python manage.py runserver 0.0.0.0:8000


FROM python:3.9-alpine3.14 as production
...
CMD gunicorn -b 0.0.0.0:8000 backend.wsgi

我正在尝试在 docker-compose.yml 中指定目标阶段,如下所示:

version: '3.7'

services:
  backend:
    build:
      target: develop
      ...

但它没有任何作用。即使我将目标设置为OohEehOohAhAahTingTangWallaWallaBingBang,也没有错误并且生产服务器(Dockerfile 中的最后阶段)启动。

那么,如何在 docker-compose.yml 中指定应该启动哪个目标?

编辑:我在 Ubuntu-20.04 中使用 WSL(Linux 的 Windows 子系统)

$ docker-compose --version
Docker Compose version v2.0.0-rc.1

【问题讨论】:

  • 这不是分离开发和产品图像的推荐方法。

标签: docker docker-compose docker-multi-stage-build


【解决方案1】:

支持 target 键,因为 docker compose 文件格式 3.4 如所述 here

3.4 文件格式自 docker compose 版本 1.17.0 起实现,如 here 所述。

您使用的是哪个 docker compose 版本?

编辑

我建议您手动安装最新的官方版本,如 in the official guide 描述:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

注意::首先删除apt安装的那个。

【讨论】:

  • 我有 v2.0.0-rc.1
  • 怎么可能?根据docs.docker.com/compose/release-notes,最新可用的是1.29.2。
  • 我忘了说我正在使用 WSL,可能是这个原因吗?
  • 没关系。问题是一样的:如何使用尚未发布的版本?尝试手动下载正确版本的docker compose并尝试使用它。
  • 你是在暗示我在撒谎吗?或者 --version 输出在骗我?我刚刚关注了docs.docker.com/desktop/windows/wsl,这是正确的解决方案......还有什么更正确的吗?
【解决方案2】:

好的,看来 docker-compose 的行为有问题。它确实尊重target,但仅在构建时 - 运行docker-compose up 时,它只会启动最后构建的图像。

因此,如果我设置target: develop,然后设置docker-compose build,然后设置docker-compose up(或... up --build),那么它将启动目标develop(简单的开发服务器)。

如果我随后设置target: production,然后设置docker-compose build,然后设置docker-compose up(或... up --build),那么它将启动目标production(全尺寸服务器)。

如果我再次设置target: develop,然后设置docker-compose build,然后设置docker-compose up(或... up --build),那么它将启动目标develop(简单的开发服务器)。

另外,它只在构建镜像时抱怨目标不存在,而不是启动容器:

failed to create LLB definition: target stage OohEehOohAhAahTingTangWallaWallaBingBang could not be found

【讨论】:

    猜你喜欢
    • 2017-01-12
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2022-11-25
    • 2016-12-08
    相关资源
    最近更新 更多