Docker 未找到文件的 CMD 错误
Docker CMD errors with File Not Found
我已经构建了一个映像,它必须 运行 一个 python 安装脚本从头到尾完成,并且旨在用作 k8s / Openshift 上的 initContainer。
图像构建良好,当我在本地执行 docker run <image>
时,它可以很好地启动脚本。此外,当我(本地)检查容器的文件系统时,脚本就在那里,正如预期的那样。
然而,当我 运行 在 Openshift 上使用与 initContainer 相同的图像时,它一直告诉我“没有这样的文件或目录”,当脚本应该启动时。
- docker文件系统有脚本,只是没找到。
- 我没有将任何卷挂载到包含脚本的目录,即该目录不应以任何方式被覆盖。
- 我已经消除了与 Shebang 混淆的 CRLF 而不是 LF(行尾)的任何问题
我预计这是由于用户的权限,但我不知道如何解决它。
Docker 文件:
<do stuff, copy some scripts / perform some setup / install dependencies>
ARG USER_UID=1001
COPY myscript /opt/build/myscript
RUN chmod +x /opt/build/myscript &&\
chown ${USER_UID}:0 -R /opt/build
CMD [ "/opt/build/myscript", "parameter1", "parameter2" ]
TL;DR:如何让docker/用户运行在k8s上“看到”这个脚本和运行它?
编辑: 当我 运行 将 docker 图像作为 k8s 容器而不是 initContainer 时,脚本被发现/这个错误不是抛出。
编辑2:原来是一个卷挂载到父目录;回答了我自己的问题。
initContainer 有一个卷挂载,它毕竟覆盖了包含脚本的父目录。我删除了卷装载,脚本现在开始。
故障排除:向 initContainer 添加了命令和参数:
initContainers:
- name: build-project
command:
- /bin/sh
- '-c'
args:
- >-
ls -la /path/to/script
发现确实不存在。有一个卷 (emptyDir: {}
) 安装到其中一个父目录。
我已经构建了一个映像,它必须 运行 一个 python 安装脚本从头到尾完成,并且旨在用作 k8s / Openshift 上的 initContainer。
图像构建良好,当我在本地执行 docker run <image>
时,它可以很好地启动脚本。此外,当我(本地)检查容器的文件系统时,脚本就在那里,正如预期的那样。
然而,当我 运行 在 Openshift 上使用与 initContainer 相同的图像时,它一直告诉我“没有这样的文件或目录”,当脚本应该启动时。
- docker文件系统有脚本,只是没找到。
- 我没有将任何卷挂载到包含脚本的目录,即该目录不应以任何方式被覆盖。
- 我已经消除了与 Shebang 混淆的 CRLF 而不是 LF(行尾)的任何问题
我预计这是由于用户的权限,但我不知道如何解决它。
Docker 文件:
<do stuff, copy some scripts / perform some setup / install dependencies>
ARG USER_UID=1001
COPY myscript /opt/build/myscript
RUN chmod +x /opt/build/myscript &&\
chown ${USER_UID}:0 -R /opt/build
CMD [ "/opt/build/myscript", "parameter1", "parameter2" ]
TL;DR:如何让docker/用户运行在k8s上“看到”这个脚本和运行它?
编辑: 当我 运行 将 docker 图像作为 k8s 容器而不是 initContainer 时,脚本被发现/这个错误不是抛出。
编辑2:原来是一个卷挂载到父目录;回答了我自己的问题。
initContainer 有一个卷挂载,它毕竟覆盖了包含脚本的父目录。我删除了卷装载,脚本现在开始。
故障排除:向 initContainer 添加了命令和参数:
initContainers:
- name: build-project
command:
- /bin/sh
- '-c'
args:
- >-
ls -la /path/to/script
发现确实不存在。有一个卷 (emptyDir: {}
) 安装到其中一个父目录。