如何在Dockerfile中设置环境变量并启动父映像

时间:2020-10-16 01:13:25

标签: docker

我有一个dockerfile,其中包含一个entrypoint.sh文件,该文件导出一些Postgres变量。 然后,我要启动“ FROM pactfoundation / pact-broker”映像中引用的父docker容器。在github上查看它的Dockerfile github pact broker,它的末尾有CMD [“ config.ru”]。所以我在Dockerfile中做了类似的事情:

FROM pactfoundation/pact-broker
  
COPY entrypoint.sh .

CMD ["config.ru"]

当我执行docker run命令时:

docker run --rm -e POSTGRES_PORT=5433 -e POSTGRES_DBNAME=pactsd -e POSTGRES_URL=localhost -e POSTGRES_PASSWORD=1234 -e POSTGRES_USERNAME=postgres --name pact sonamsamdupkhangsar/pact:test -d

我看到我的entrypoint.sh回显语句,并且容器已死。

setting pact broker database variables

在entrypoint.sh文件中设置环境变量后,如何启动父容器?

我还尝试了以下方法:

FROM pactfoundation/pact-broker
  
ENV PACT_BROKER_DATABASE_NAME=${POSTGRES_DBNAME}
ENV PACT_BROKER_DATABASE_USERNAME=${POSTGRES_USERNAME}
ENV PACT_BROKER_DATABASE_PASSWORD=${POSTGRES_PASSWORD}
ENV PACT_BROKER_DATABASE_HOST=${POSTGRES_URL}
ENV PACT_BROKER_DATABASE_NAME=${POSTGRES_DBNAME}
ENV PACT_BROKER_DATABASE_PORT=$POSTGRES_PORT

RUN echo "PACT_BROKER_DATABASE_PORT: $PACT_BROKER_DATABASE_PORT"

但是,当我运行构建的docker映像时,仍然看不到设置的变量。我尝试使用“ $ {}”和“ $”两种方法进行环境变量设置。

1 个答案:

答案 0 :(得分:0)

您必须在docker文件中使用ENV设置环境变量。

由于在不同的容器中执行的每个步骤(如果您通过shell脚本进行设置)将共同构建映像,因此它将无法正常工作。考虑使用ENV命令进行设置

参考:DOCKERFILE ENV