首页 > 解决方案 > 使用 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,就好像它不会安装一样。这让我觉得它可以为其他用户安装?或者对于与运行容器的用户不同的用户?或者根本没有安装?

如果您能帮我解决这个问题,我们将不胜感激。

标签: dockerubuntuchmod

解决方案


原因可能是文件最初提交到 Github 时没有执行权限。因此,当您在本地测试它时,执行权限在那里它可以工作,但是在新的克隆上它不会工作

为此,您需要在下面使用

使用 git 版本控制仅更新和提交文件的权限

更好的方法是使用以下类型的RUN语句

RUN sh /installers/install_R.sh

或者

RUN chmod +x /installers/install_R.sh && /installers/install_R.sh

推荐阅读