我正在尝试执行以下操作:
以下是我的设置:
FROM ubuntu:xenial
ARG EXECUTABLE
ENV EXECUTABLE ${EXECUTABLE}
CMD ["/opt/foo/bin/${EXECUTABLE}", "-bar"]
Run Code Online (Sandbox Code Playgroud)
这是我建造集装箱的方式
docker build --build-arg EXECUTABLE=$EXECUTABLE -t test_image .
Run Code Online (Sandbox Code Playgroud)
这是我运行图像的方式
docker run -d test_image
Run Code Online (Sandbox Code Playgroud)
当我运行容器时,它崩溃并告诉我
docker: Error response from daemon: OCI runtime create failed:
container_linux.go:296: starting container process caused
"exec: \"/opt/foo/bin/${EXECUTABLE}\": stat /opt/foo/bin/${EXECUTABLE}:
no such file or directory": unknown.
Run Code Online (Sandbox Code Playgroud)
要使用环境变量,您需要使用shell。
https://docs.docker.com/engine/reference/builder/#cmd
注意:与shell窗体不同,exec窗体不会调用命令shell。这意味着正常的外壳处理不会发生。例如,CMD [“ echo”,“ $ HOME”]不会在$ HOME上进行变量替换。如果要进行外壳处理,则可以使用外壳形式或直接执行外壳,例如:CMD [“ sh”,“-c”,“ echo $ HOME”]。当使用exec表单并直接执行shell时(例如在shell表单中),是由shell进行环境变量扩展,而不是docker。
基于此,我认为您可以通过以下方法很好地工作Dockerfile。
FROM ubuntu:xenial
ARG EXECUTABLE
ENV EXECUTABLE ${EXECUTABLE}
CMD [ "sh", "-c", "/opt/foo/bin/${EXECUTABLE}", "-bar"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2606 次 |
| 最近记录: |