我只想在ARG存在的时候设置ENV。
我想做的是:
FROM ruby:3.0.1
ARG RAILS_MASTER_KEY
if [[ -n "$RAILS_MASTER_KEY" ]] ;
then ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY
fi环境;
使用凭据
的
用于本地env
我有一个服务的3个存储库。
并且每个存储库都有dockerCompose.yml,它通过Dockerfile构建自己的映像,并从ECR中提取其他存储库的映像。
当合并到主分支时,CircleCI通过Dockerfile构建映像并推送到ECR。
因为我是通过CircleCI上下文管理密钥的,所以在--build-arg构建映像时通过--build-arg传递密钥,并且在本地构建存储库时不需要ENV,因为本地有密钥文件。
下面是我尝试过的内容,但是ENV仍然设置为空值,比如RAILS_MASTER_KEY=。由于这个问题,我的rails容器在码头组装时不起作用。

Dockerfile之前
FROM ruby:3.0.1
ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY我试过的是:
FROM ruby:3.0.1
ARG RAILS_MASTER_KEY
RUN if [[ -n "$RAILS_MASTER_KEY" ]] ; then export RAILS_MASTER_KEY=$RAILS_MASTER_KEY; fiFROM ruby:3.0.1
ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY
RUN if [[ -z "$RAILS_MASTER_KEY" ]] ; then unset RAILS_MASTER_KEY; fi下面是CircleCi配置文件FYI。
...
commands:
# image-build-push for k8s
build-push-image:
steps:
- checkout
- setup_remote_docker:
docker_layer_caching: true
- aws-ecr/build-and-push-image:
dockerfile: ${DOCKER_FILE_PATH}
no-output-timeout: 20m
region: AWS_DEFAULT_REGION
repo: ${ECR_REPO_NAME}
tag: ${IMAGE_TAG}
extra-build-args: --build-arg RAILS_MASTER_KEY=${RAILS_MASTER_KEY}
...发布于 2021-12-10 02:50:06
更新
最后,我在Dockerfile中使用env_file解决了这个问题。
...
services:
app:
build:
context: .
dockerfile: docker/Dockerfile.local
env_file:
- docker/env/.env.api.local
app:
image: ....
env_file:
- docker/env/.env.app.local
...并将.env文件共享给成员。
#.gitignore
...
.env.*
...这样做,
我的三个存储库都有.env.api.local、.env.app.local文件和docker--在每个服务上以env_file的形式读取文件。
在此之前
我做了一个独立的Dockerfile来解决问题。
Dockerfile.local in docker-compose.yml.
Dockerfile.dev in CircleCI config.yml和我使用--build-arg传递ARG
Dockerfile.local;
# for local
# built by docker-compose
# not using ENV
FROM ruby:3.0.1
...Dockerfile.dev;
# image for other repository
# built and push by CircleCI
# using ENV
FROM ruby:3.0.1
ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY=$RAILS_MASTER_KEY
...https://stackoverflow.com/questions/70285650
复制相似问题