【发布时间】:2021-06-30 01:17:13
【问题描述】:
我正在用 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,就好像它不会安装一样。这让我觉得它可以为其他用户安装?或者对于与运行容器的用户不同的用户?或者根本没有安装?
如果您能帮我解决这个问题,我们将不胜感激。
【问题讨论】:
-
你是如何启动容器的?如果您按照您的描述运行
chmod,您如何验证安装是否符合您的预期?您的应用程序如何使用sudo、htop或man(或者您可以安全地从映像中删除这些包)? -
1- 当我使用
chmod时,我没有完全“验证”安装了东西。我只知道图像构建与存在chmod命令的dockerfile 一起工作。如果我运行交互式会话,我找不到带有whereis xxx的 bin。 2- 当我构建图像时,我从github.com/rocker-org/rocker-versioned2/tree/master/dockerfiles 中提取了一些部分。我不知道哪些是完全必需的,但其中大部分已经存在于模板中。