繁体   English   中英

将 args 从 docker-compose 传递给 Dockerfile

[英]Pass args to the Dockerfile from docker-compose

我有我的产品环境的下一个配置:

docker-compose-prod.yml

version: '3.3'
services:
  nginx:
    build:
      context: nginx
      dockerfile: Dockerfile
      args:
        LANDING_PAGE_DOMAIN: ${LANDING_PAGE_DOMAIN}
    container_name: nginx   
    networks:
      - app-network

Dockerfile

FROM nginx:alpine

COPY nginx.conf /etc/nginx/nginx.conf
COPY production/* /etc/nginx/conf.d/

ARG LANDING_PAGE_DOMAIN
RUN sed -i s/{LANDING_PAGE_DOMAIN}/${LANDING_PAGE_DOMAIN}/g /etc/nginx/conf.d/landing.conf

EXPOSE 80 443

因此,当我尝试构建它时,我收到了下一个警告:

docker-compose -f docker-compose.production.yml build --build-arg LANDING_PAGE_DOMAIN="test.com" nginx

警告:未设置 LANDING_PAGE_DOMAIN 变量。 默认为空字符串。

我在哪里做错了?

关键字ARGFROM指令前后有不同的scope

尝试在 Dockerfile 中使用 ARG 两次,和/或您可以尝试使用 ENV 变量

ARG LANDING_PAGE_DOMAIN
FROM nginx:alpine

COPY nginx.conf /etc/nginx/nginx.conf
COPY production/* /etc/nginx/conf.d/

ARG LANDING_PAGE_DOMAIN
ENV LANDING_PAGE_DOMAIN=${LANDING_PAGE_DOMAIN}

RUN sed -i s/{LANDING_PAGE_DOMAIN}/${LANDING_PAGE_DOMAIN}/g /etc/nginx/conf.d/landing.conf

EXPOSE 80 443

有两个选项如何使它工作:

  1. 使用docker-compose-prod.yml中的现有代码并设置环境变量LANDING_PAGE_DOMAIN

    export LANDING_PAGE_DOMAIN=test.com

    然后在不传递构建参数的情况下运行构建步骤:

    docker-compose -f docker-compose.production.yml build nginx

  2. docker-compose-prod.yml文件中注释/删除 2 行:

        args:
          LANDING_PAGE_DOMAIN: ${LANDING_PAGE_DOMAIN}

然后你就可以通过在构建时传递 arguments 来构建它:

docker-compose -f docker-compose-prod.yml build --build-arg
LANDING_PAGE_DOMAIN="test.com" nginx

它目前不起作用的原因是因为docker-compose-prod.yml文件中的这两行明确地将LANDING_PAGE_DOMAIN参数设置为由${LANDING_PAGE_DOMAIN}环境变量填充。

当您使用--build-arg选项运行docker-compose build时,它不会设置任何环境变量,而是通过 arguments 进行build步骤。

您需要将ARG LANDING_PAGE_DOMAIN=value添加到 Dockerfile 中:

文档

ARG 指令允许 Dockerfile 作者定义用户可以在构建时使用 --build-arg 标志设置的值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM