我具有产品环境的下一个配置:
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变量。默认为 空字符串。
我在哪里弄错了?
答案 0 :(得分:0)
您需要将ARG LANDING_PAGE_DOMAIN=value
添加到您的Dockerfile:
从docs
ARG指令可让Dockerfile作者定义用户可以使用的值 可以使用--build-arg标志在构建时进行设置
答案 1 :(得分:0)
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
答案 2 :(得分:0)
有2种方法使其起作用:
使用docker-compose-prod.yml
中的现有代码并设置环境
变量LANDING_PAGE_DOMAIN
:
export LANDING_PAGE_DOMAIN=test.com
然后运行不带构建参数的构建步骤:
docker-compose -f docker-compose.production.yml build nginx
评论/从docker-compose-prod.yml
文件中删除2行:
args:
LANDING_PAGE_DOMAIN: ${LANDING_PAGE_DOMAIN}
那么您将能够在构建时通过传递参数来构建它:
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}
环境变量填充。
当您使用docker-compose build
选项运行--build-arg
时,它不会设置任何环境变量,而实际上是传递build
步骤的参数。