将参数从docker compose传递到Dockerfile
我有我的产品环境的下一个配置: docker-compose-prod.yml将参数从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: -
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
步骤的参数 在DockerfileARG 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