使用 Docker compose 为 Docker 文件传递​​参数

Passing arguments for Dockerfiles using Docker compose

我正在尝试在构建阶段使用参数化我的 docker 文件,并在 Docker-compose 中使用参数。例如,在 Docker compose 中,我定义了一个名为 bpp 的服务,如下所示:

bpp:
  build:
    context: .
    dockerfile: Dockerfile.bpp
    args:
      gp : 8080
  image: serv/bpp
  restart: always
  depends_on:
    - data
  links:
    - data

我正在尝试将名为 gp 的参数传递给 Dockerfile.bpp,其中我在启动 Python 应用程序时使用参数,公开端口等。 例如在 dockerfile.bpp 中尝试公开端口 gp 如下:

EXPOSE gp

但是,当通过命令 docker-compose build 构建 docker 文件时,出现以下错误: 错误:服务 'bpp' 构建失败:无效的容器端口:gp

似乎参数 gp 在 docker 文件中不可见。有什么建议吗?

首先,the syntax is

build:
  args:
    buildno: 1
    user: someuser

build:
  args:
    - buildno=1
    - user=someuser

所以尝试使用 gp: 8080,而不是 gp : 8080

其次,确保您使用的是 version 2 of the docker-compose.yml format

三、试试

EXPOSE $gp

您需要将 ARG gp 添加到您的 Dockerfile。

...
ARG gp

EXPOSE $gp
...

https://docs.docker.com/engine/reference/builder/#arg

值得一提的是,当您通过撰写 运行 时,这不会公开端口,但您需要向 docker 添加 ports 指令-compose.yml 为此。