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.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
安装的那个。
好的,看来 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
我正在尝试创建一个多阶段 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.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
安装的那个。
好的,看来 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