这不起作用:
FROM alpine:3.7
# build argument with default value
ARG PING_HOST=localhost
# environment variable with same value
ENV PING_HOST=${PING_HOST}
# act as executable
ENTRYPOINT ["/bin/ping"]
# default command
CMD ["${PING_HOST}"]
应该可以使用build-arg构建镜像,并可以使用环境变量启动容器来覆盖cmd。
docker build -t ping-image .
docker run -it --rm ping-image
错误:ping:地址错误“$ {PING_HOST}”
更新:
FROM alpine:3.7
# build argument with default value
ARG PING_HOST=localhost
# environment variable with same value
ENV PING_HOST ${PING_HOST}
COPY ./entrypoint.sh /usr/local/bin/
# act as executable
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# default command
CMD $PING_HOST
入口点
#!/bin/sh
/bin/ping $PING_HOST
这是有效的,因为entrypoint.sh启用了预期的变量替换。
最佳答案
对于CMD扩展变量,您需要安排一个shell,因为shell负责扩展环境变量,而不是Docker。您可以这样做:
ENTRYPOINT ["/bin/sh"]
CMD ["-c" , "ping ${PING_HOST}"]
要么
CMD ["sh", "-c", "ping ${PING_HOST}"]
关于docker - 带有构建参数的ENTRYPOINT和CMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092538/