例如有
.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
都无法使用
答案 0 :(得分:1)
如果我对您的理解正确,那么您希望将环境变量的值烘焙到图像中。请注意,您宁愿相反,即构建通用映像并通过设置环境变量来调整其行为。不过,这两种方法都是相似的。
为了将环境变量的值烘焙到图像中,您必须使用Dockerfile中的ARG
关键字指定环境变量的值,并在以下情况下通过--build-arg
传递其值在外壳中使用docker build
,或在撰写文件中使用args
关键字。考虑以下Dockerfile和docker-compose文件:
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"]
docker-compose.yml
version: "3.7"
services:
app:
build:
context: .
args:
ENV_BACKEND_URI: "google.de"
在Dockerfile中使用ARG
关键字,我们声明要在构建时使用变量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
。