docker-compose build context dockerfile envar image

docker-compose build context dockerfile envar image

我想使用 docker-compose 到 build/run docker 在其 FROM 关键字中包含 envars 的文件。我现在遇到的问题是,我似乎无法通过 docker-compose 从我的环境中将 envars 传递到 docker 文件中。

docker-compose.yml

version: "3.2"
services:
  api:
    build: 'api/'
    restart: on-failure
    depends_on:
      - mysql
    networks:
      - frontend
      - backend
    volumes:
      - ./api/php/:/var/www/html/

'api/'

中的 Dockerfile
FROM ${DOCKER_IMAGE_API}
RUN apk update
RUN apk upgrade
RUN docker-php-ext-install mysqli

为什么?

我想这样做,这样我就可以 运行 docker-从 bash 检测主机架构并更改底层 docker主机应用程序中的文件。

FROM 指令支持由第一个 FROM 之前发生的任何 ARG 指令声明的变量。所以你可以做的是:

ARG IMAGE
FROM $IMAGE

当您 运行 构建命令时,您将传递 --build-arg 如下:

 docker build -t test --build-arg IMAGE=alpine .

您还可以选择为 IMAGE 变量设置默认值,以便在未使用 --build-arg 标志时使用。

或者,如果您要使用 docker compose build 而不是 docker build(我认为这是您的情况),您可以在 docker 中指定变量-compose build --build-arg:

version: "3.9"
services:
  api:
    build: .

然后

docker compose build --build-arg IMAGE=alpine