docker - 使用 chmod 安装时在 docker 中找不到命令
问题描述
我正在用 R 编写一个 Docker 容器。对于 dockerfile 组合,我使用 VScode 及其扩展。目前我可以完全按照我的意愿运行容器,但是,当我将 dockerfile 推送到 Github 并从那里触发 dockerhub 中的构建时,我注意到以下问题:
Dockerfile:
FROM nvidia/cuda:11.2.2-base-ubuntu20.04
# Install dependencies
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
dumb-init \
htop \
sudo \
gcc \
bzip2 \
libx11-6 \
locales \
man \
git \
procps \
openssh-client \
lsb-release \
&& rm -rf /var/lib/apt/lists/*
COPY installers /installers
COPY entrypoint.sh /usr/bin/entrypoint.sh
RUN /installers/install_R.sh
COPY run_simple.sh /usr/run_simple.sh
CMD ["bash","/usr/run_simple.sh"]
错误:
...
...
[91m/bin/sh: 1: /installers/install_R.sh: Permission denied
[0m
Removing intermediate container 1ea9ba9d9d2b
The command '/bin/sh -c /installers/install_R.sh' returned a non-zero code: 126
显然,构建器无法访问复制的文件。因此,如果我将文件运行为RUN chmod +x /installers/install_R.sh
,则没有安装问题。但是,当我启动容器时,我看不到任何地方 R,就好像它不会安装一样。这让我觉得它可以为其他用户安装?或者对于与运行容器的用户不同的用户?或者根本没有安装?
如果您能帮我解决这个问题,我们将不胜感激。
解决方案
原因可能是文件最初提交到 Github 时没有执行权限。因此,当您在本地测试它时,执行权限在那里它可以工作,但是在新的克隆上它不会工作
为此,您需要在下面使用
更好的方法是使用以下类型的RUN
语句
RUN sh /installers/install_R.sh
或者
RUN chmod +x /installers/install_R.sh && /installers/install_R.sh
推荐阅读
- html - 手机浏览器绝对底层
- substrate - 在 Windows 10 中编译基板节点模板时出现基板 Dev Hub 错误
- java - java方法引用表达式和定义为lambda的变量有什么区别?
- python - Python:将项目附加到列表(字符串名称与列表名称相同)
- javascript - 图表!值为0时如何删除数据标签
- c - 如何使用管道向子进程发送标志?
- typescript - 在 Typescript 中定义枚举类型的数组
- omnet++ - 多个节点无法使用一个 eNB 进行通信
- r - R:获取值不为空的列名
- python - 当我尝试下载 PyAudio 时,我刚刚收到此错误消息。这太痛苦了。请多多关照