如何将参数传递给Docker ENTRYPOINT中的bash文件?

时间:2019-07-31 11:52:19

标签: docker dockerfile

我有一个使用自定义entrypoint.sh的dockerfile。在此文件中,我想使用从docker-compose传递到dockerfile的ARGS。

问题是我没有将变量的内容获取到dockerfile中,而只是获得了变量名称。

例如:

ARGS ENVIROMENT=production
ENTRYPOINT ["/var/www/html/entrypoint.sh"]
CMD ["${ENVIROMENT}"]

entrypoint.sh

#!/bin/sh
cd /var/www/html
composer update
echo $1;

回声$ 1显示“ $ {Enviroment}”而不是我期望的“生产”。

2 个答案:

答案 0 :(得分:1)

哦!您已经对Docker提出了这个问题。

但是首先,让我在这里澄清一点:

  • 首先,您的示例中有一个错字。是<div layout="column"> <mat-form-field> <label>Start Date/Time</label> <input mdc-datetime-picker="" date="true" time="true" type="text" placeholder="Date" max-date="dateTimeEnd" ng-model="dateTimeStart" class=" md-input" readonly="readonly" id="input_0"> <div></div> </mat-form-field> </div> 而不是ARG
  • ARGS允许您定义构建时变量。意味着此变量仅在执行ARG命令时才有用。然后,您可以使用docker image build覆盖它。例如:
--build-arg
  • 相反,docker image build --build-arg ENVIROMENT=integration ...` 允许您定义可在运行时使用的环境变量。

您可以在官方文档中找到envarg

所需的所有信息。

现在,回到重点...

简单起见:

    想要将某些环境变量从cmd传递到入口点时,
  • 不要同时使用 ENTRYPOINT CMD 。真是痛苦。真的。
  • 如果要在 CMD 中使用环境变量,则必须使用bash格式,或者为命令加上前缀ENV作为exec格式:
sh -c

这是同时使用两种语法的Dockerfile(只需取消注释要使用的 CMD ):

CMD ["sh", "-c", "echo ${GREETINGS}"]
#or
CMD echo ${GREETINGS}

您可以找到有关这些问题的更多详细信息:

答案 1 :(得分:1)

我想完成马克·阿布恰克拉的回答。 仍然缺少的是如何使用ARG命令。

可能的解决方案可能是:

ARG ENVIRONMENT=production
ENV ENVIRONMENT=$ENVIRONMENT 
CMD exec /var/www/html/entrypoint.sh $ENVIRONMENT

执行程序在那里确保您的入口点。sh是PID = 1的进程。