环境变量未在 dockerfile 中提取

Posted

技术标签:

【中文标题】环境变量未在 dockerfile 中提取【英文标题】:Environment variable not picking up in dockerfile 【发布时间】:2021-12-20 04:54:46 【问题描述】:

我有一个与 docker 一起服务的 Vue 应用程序,目前我想使用环境变量来定位特定的项目 repo。但是当我设置环境变量时,它并没有在 dockerfile 中提取,

我在设置中做错了什么?

NPM 脚本

scripts: 
   "build:project1": "vue-cli-service build src/project1/main.js",
   "deploy:project1": "cross-env PROJECT_REPO=project1 bash build_deploy.sh"

build_deploy.sh

#!/bin/bash

docker build -t $PROJECT_REPO .

Dockerfile

# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build:$PROJECT_REPO

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

【问题讨论】:

如果这个 dockerfile 被设计为使用环境变量,我希望在某处看到ARG 我尝试在 build_deploy.sh 文件中使用 --buid-arg,但无法使用 RUN npm run build:$PROJECT_REPO 澄清:我希望在 dockerfile 中有一个 ARG,而不是在用于构建的命令中。 【参考方案1】:

啊哈。找到了。我在 docker 文件中缺少 ARG

# build stage
ARG PROJECT_REPO
FROM node:lts-alpine as build-stage

ARG PROJECT_REPO
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build:$PROJECT_REPO

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

参考来自文档:https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact

【讨论】:

以上是关于环境变量未在 dockerfile 中提取的主要内容,如果未能解决你的问题,请参考以下文章

在 Dockerfile 中,如何更新 PATH 环境变量?

dockerfile 容器添加 环境变量

在Dockerfile中公开具有不同名称的环境变量

POSTMAN 错误:未解析变量:“此变量未在活动集合、环境或全局变量中定义。”

来自 Dockerfile 的值可在 Sources 选项卡中搜索 - 如何保护环境变量?

dockerfile镜像脚本中设置环境变量的是哪一项