【问题标题】:how to get the env values declared inline in dockerfile from run env parameter instead in docker如何从运行 env 参数而不是在 docker 中获取在 dockerfile 中内联声明的 env 值
【发布时间】:2017-11-27 10:14:35
【问题描述】:

我已经成功地为 magento2 设置了 docker 容器,这就是我通过将 env 值内联设置为如下方式将数据库设置值传递给 magento2 cli 命令的方式。

FROM docker-php
#mysqql setup
ENV DB_HOST 172.17.0.2
ENV DB_NAME mydb1
ENV DB_USER prakash 
ENV DB_PASSWORD password

#start running the magento commands to install
RUN cd /usr/html/bin  && \
     ./magento setup:config:set  --db-host=$DB_HOST --db-name=$DB_NAME --db-user=$DB_USER --db-password=$DB_PASSWORD

我如何做到这一点,以便可以通过像下面这样在运行中传递这些值来成功接收这些值 docker run -e DB_HOST="" -e DB_NAME="" -e DB_USER="" -e DB_PASSWORD="" <build-image-id>

看到很少有帖子描述如何实现这些,但无法找出正确的方法

【问题讨论】:

  • 您的实际问题是什么? -e 选项应该将您指定的值传播到环境中,覆盖 Dockerfile 中的任何默认设置。
  • @tripleee RUN 命令不使用环境变量
  • 嗯?它们在您运行 docker build 或您有什么时设置。
  • @tripleee docker build --help-e 没有选项。您不能从 cli 中使用它们,只能在 dockerfile 中硬编码
  • 你为什么想要那个?据我所知,OP 正在询问docker run

标签: docker automation dockerfile magento2


【解决方案1】:

您正在RUN 命令中使用 ENV 值。该命令在构建容器时执行,而不是在运行时执行。当您在 dockerfile 中硬编码 env 值时,这可以正常工作,但是您不能在 cli 上传递它们。

因此您必须通过RUN 命令构建参数。这些参数在构建容器时使用,因此在执行 RUN 命令时使用。

FROM docker-php
#mysqql setup
ARG DB_HOST
ARG DB_NAME
ARG DB_USER 
ARG DB_PASSWORD

#start running the magento commands to install
RUN cd /usr/html/bin  && \
     ./magento setup:config:set  --db-host=$DB_HOST --db-name=$DB_NAME --db-user=$DB_USER --db-password=$DB_PASSWORD

然后可以使用以下方法构建图像:

docker build --build-args DB_HOST=172.17.0.2 DB_NAME=mydb1 DB_USER=prakash DB_PASSWORD=password -t <image-name> .   

【讨论】:

  • 是否可以在运行期间传递这些值,而不是通过将其作为 -e 值传递给构建
  • 再一次,你的RUN 在使用docker build 构建映像时执行。您必须在运行之前构建映像
  • 但是使用一组值构建,然后使用一组不同的值运行 docker run -e var=value 确实有效,并覆盖了 Dockerfile 中的任何默认值。
  • @tripleee 是的,但此时RUN 命令已经使用第一组值执行
  • @TaraPrasadGurung 它是CMDENTRYPOINT。这些指令在docker run 上执行,并将检测到在cli 上传递的-e 参数。
猜你喜欢
  • 1970-01-01
  • 2022-10-09
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
相关资源
最近更新 更多