如何在运行时将环境变量作为Dockerfile中的Shell脚本的参数传递?
PUBLISH_HOST来自.env文件
我的docker-compose文件如下:
version: '2'
services:
tomcat:
build:
context: .
args:
PUBLISH_HOST: ${PUBLISH_HOST}
dockerfile: Dockerfile.tomcat
container_name: tomcat
image: tomcat-new:latest
restart: always
ports:
- 8080:8080
Dockerfile如下:
FROM 99taxis/tomcat7
ARG PUBLISH_HOST //taken from docker-compose for all other this is working fine not working while passing in a shell script
ENV PUBLISH_HOST $MAXPAAS_PUBLISH_HOST
COPY update-tomcat-path-config.sh /opt/tomcat/webapps
RUN cd /opt/tomcat/webapps && chmod 755 update-tomcat-path-config.sh && ./update-tomcat-path-config.sh ${PUBLISH_HOST}
但是输入${PUBLISH_HOST}
在此shell脚本中未被接受为参数。
有什么办法可以解决这个问题?
这是我在尝试docker-compose up
Step 25/37 : /opt/tomcat/webapps && chmod 755 update-tomcat-path-config.sh && /update-tomcat-path-config.sh ${PUBLISH_HOST}
---> Running in 8ad3b1ecd73e
###################
Script starts Here:
###################
No parameter to the script is given, please enter it....!!!!
该如何解决?
答案 0 :(得分:2)
我找到了答案。
要在shell脚本中传递参数,只需在参数之间使用双引号
RUN cd /opt/tomcat/webapps && chmod 755 update-tomcat-path-config.sh && \
./update-tomcat-path-config.sh "${PUBLISH_HOST}"
# ^ ^
答案 1 :(得分:1)
请参见“ Setting Default Docker Environment Variables During Image Build”
您的行应为:
ARG PUBLISH_HOST //taken from docker-compose for all other this is working fine not working while passing in a shell script
ENV PUBLISH_HOST $PUBLISH_HOST
这将使ENV
在构建时被ARG
值覆盖:
docker build --build-arg PUBLISH_HOST=aValue
docker-compose build --build-arg PUBLISH_HOST=aValue aSERVICE
注意:
您的docker-compose.yml
可能不使用您的dockerfile,因为dockerfile: Dockerfile.tomcat
没有正确缩进。
参见docker-compose.yml
"alternate Dockerfile":
Compose使用一个替代文件进行构建。
还必须指定一个构建路径。
build:
context: .
dockerfile: Dockerfile-alternate