docker-compose没有启动指定阶段

docker-compose does not start the specified stage

我正在尝试创建一个多阶段 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中启动哪个目标?

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

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

支持 target 关键字,因为 docker 撰写 文件格式 3.4here 所述。

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安装的那个。

好的,看来 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