【问题标题】:Docker permissions between build and run differ构建和运行之间的 Docker 权限不同
【发布时间】:2020-03-18 18:41:30
【问题描述】:

我昨天刚开始玩 Docker,但在构建环境和运行环境之间遇到了问题。明智地构建我有类似的问题......

RUN install.sh
/bin/sh: 1: install.sh: Permission denied
the command '/bin/sh -c install.sh' returned a non-zero code: 126

或者...

RUN . sourceme.env
/bin/sh: 1: .: sourceme.env: not found
The command '/bin/sh -c . sourceme.env' returned a non-zero code: 2

我使用 'sudo docker build -t joes' 和 我使用 'sudo docker run -it joes' 运行

令人沮丧的是,构建失败后我可以运行它,看到我在我预期的工作目录中,然后运行构建成功期间失败的命令。那么为什么会出现差异呢?

这是在 linux 系统上,我使用的是 'FROM ubuntu:18.04'

绕过我使用的 RUN install.sh 错误

RUN /bin/sh install.sh

转换成

/bin/sh -c /bin/sh install.sh

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    发布您的整个 Dockerfile。问题是您没有指向正确的位置。复制时,将其复制进去,然后提供绝对路径。 例如

    COPY install.sh /install.sh
    CMD ./install.sh
    

    编辑:如果您的容器主要工作是运行 install.sh 脚本,则将其与 CMD 一起使用,而不是 RUN。使用 run 来构建 env 和 evth 。

    【讨论】:

    • 对于本节,它实际上只是 WORKDIR /some/dir => RUN svn co someurl => RUN 。 sourceme.env 它失败了,然后我运行容器(通过删除虚线创建到该点),我看到我已经在 /some/dir 中,我可以看到 sourceme.env 文件。
    • 实际上使用 /some/dir/sourceme.env 可以,但是里面的路径会中断。如果目录未使用/不可见,WORKDIR 有什么意义?另外,我的大问题是 /bin/sh 和 source 不混合。 stackoverflow.com/questions/13702425/… 那么我如何在不调用 '/bin/sh' 的情况下像从命令行一样“运行”命令
    • @JoeManiaci 你能编辑你的问题并包含你的 Dockerfile 吗?这将有助于我们重现您的问题。
    【解决方案2】:

    Using the RUN instruction in a Dockerfile with 'source' does not work 似乎是我的主要问题

    同时运行多个 RUN 命令而不是 RUN ... && ... && ... 等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2020-01-07
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多