将参数从docker compose传递到Dockerfile

将参数从docker compose传递到Dockerfile,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有我的产品环境的下一个配置: 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: -

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

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
警告:未设置登录页面域变量。拖欠 空白字符串


我哪里出错了?

您需要将
ARG LANDING\u PAGE\u DOMAIN=value
添加到您的Dockerfile中:

ARG指令允许Dockerfile作者定义用户需要的值 可以在生成时使用--build arg标志进行设置


关键字
ARG
FROM
指令之前和之后具有不同的范围

在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

如何使其工作,有两个选项:

  • 使用
    docker-compose-prod.yml
    中的现有代码并设置环境 变量
    LANDING\u PAGE\u DOMAIN

    export LANDING\u PAGE\u DOMAIN=test.com

    然后运行生成步骤,不传递生成参数:

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

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

  • 然后,您可以在构建时通过传递参数来构建它:

    docker-compose -f docker-compose-prod.yml build --build-arg
    LANDING_PAGE_DOMAIN="test.com" nginx
    
    它当前不起作用的原因是,
    docker-compose-prod.yml
    文件中的这两行明确地设置了
    LANDING\u PAGE\u DOMAIN
    参数,该参数将由
    ${LANDING\u PAGE\u DOMAIN}
    环境变量填充


    当您使用
    --build arg
    选项运行
    docker compose build
    时,它不会设置任何环境变量,而是直接传递
    build
    步骤的参数

    在Dockerfile
    ARG LANDING\u PAGE\u DOMAIN$LANDING\u PAGE\u DOMAIN
    中同样添加ARG值,或者在开始构建之前将其导出从Dockerfile构建之前,我收到了撰写警告消息,似乎--build ARG没有看到我的输入
    docker-compose -f docker-compose-prod.yml build --build-arg
    LANDING_PAGE_DOMAIN="test.com" nginx