docker - 如何在 dockerfile 中使用来自 gitlab-ci.yml 的变量
问题描述
例如
.gitlab-cy.yml
有ENV_BACKEND_URI
变量
build:
stage: build
variables:
ENV_BACKEND_URI: "http://localhost:4200"
script:
- docker-compose build
docker-compose
用途dockerfile
FROM node:10-alpine as build-stage
...
...
...
RUN ["chmod", "+x", "/dummy.sh"]
...
...
我想在脚本中使用这个ENV_BACKEND_URI
变量dummy.sh
例如只是为了回应它
echo $ENV_BACKEND_URI
我如何通过它?
我已经尝试将其设置为docker-compose.yml
environment:
- ENV_BACKEND_URI=${ENV_BACKEND_URI}
dockerfile
但它在也不可用dymmy.sh
解决方案
如果我理解正确,那么您想将环境变量的值烘焙到您的图像中。请注意,您宁愿相反,即构建通用图像并通过设置环境变量来调整其行为。不过,这两种方法都是相似的。
为了将环境变量的值烘焙到图像中,您必须使用ARG
Dockerfile 中的关键字指定环境变量的值,并在从 shell--build-arg
使用时或通过compose 文件中的关键字传递其值. 考虑以下 Dockerfile 和 docker-compose 文件:docker build
args
Dockerfile
FROM alpine
ARG ENV_BACKEND_URI=$ENV_BACKEND_URI
RUN mkdir -p /app
RUN echo $ENV_BACKEND_URI > /app/script.sh
CMD ["cat", "/app/script.sh"]
码头工人-compose.yml
version: "3.7"
services:
app:
build:
context: .
args:
ENV_BACKEND_URI: "google.de"
使用ARG
Dockerfile 中的关键字,我们声明我们要ENV_BACKEND_URI
在构建时使用该变量,其值应等于ENV_BACKEND_URI
我们在构建期间收到的环境值。我们使用arg
关键字在撰写文件中这样做。
调用后docker-compose build && docker-compose up
,您最终会看到输出app_1 | google.de
。如果您更喜欢使用该docker build
命令,您必须先调用docker build --build-arg ENV_BACKEND_URI=google.de --tag=foo .
,然后通过调用docker run foo
. 两者都产生相同的输出,即它们打印google.de
到标准输出。
对于您的 CI/CD 用例,您必须将撰写文件中的变量值设置为环境中变量的值,即ENV_BACKEND_URI: $ENV_BACKEND_URI
.
推荐阅读
- c# - Xamarin AVFoundation,为视频添加字幕
- testing - Visual Studio Code 测试侧边栏按钮消失
- jenkins - Jenkins 403 错误:请求中没有包含有效的面包屑
- c# - 在 Entity Framework .NET5 中获取多级相关记录
- interpolation - Matplotlib 散点插值线
- docker - 如何让 .Net 微服务在 Linux 中运行以使用集成安全连接到 Windows 上的 SQL Server DB
- c# - 有没有办法在 ASP.Net Core 的活动目录中获取用户的完整路径?
- substrate - polkadot.js:无法创建枚举
- jupyter-lab - 如何将笔记本(.ipynb 文件)添加到 Launcher?
- python - 如何为预训练模型应用烧瓶缓存?