use*_*137 11 docker dockerfile docker-compose
我有我的 prod env 的下一个配置:
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
Run Code Online (Sandbox Code Playgroud)
文件
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
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试构建它时,我收到了下一个警告:
docker-compose -f docker-compose.production.yml build --build-arg LANDING_PAGE_DOMAIN="test.com" nginx
Run Code Online (Sandbox Code Playgroud)
警告:未设置 LANDING_PAGE_DOMAIN 变量。默认为空字符串。
我哪里做错了?
Nat*_*ael 14
指令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
Run Code Online (Sandbox Code Playgroud)
有 2 个选项可以使其发挥作用:
使用现有代码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:
args:
LANDING_PAGE_DOMAIN: ${LANDING_PAGE_DOMAIN}
Run Code Online (Sandbox Code Playgroud)
然后您将能够在构建时通过传递参数来构建它:
docker-compose -f docker-compose-prod.yml build --build-arg
LANDING_PAGE_DOMAIN="test.com" nginx
Run Code Online (Sandbox Code Playgroud)
它目前不起作用的原因是因为docker-compose-prod.yml文件中的这两行显式地将LANDING_PAGE_DOMAIN参数设置为由${LANDING_PAGE_DOMAIN}环境变量填充。
当您使用docker-compose buildoption运行时--build-arg,它不会设置任何环境变量,而是逐字传递build步骤的参数。
| 归档时间: |
|
| 查看次数: |
7449 次 |
| 最近记录: |