【问题标题】:You don't have write permissions for the /usr/lib/ruby/gems/2.7.0 directory (Alpine linux docker image)您没有 /usr/lib/ruby/gems/2.7.0 目录的写权限(Alpine linux docker image)
【发布时间】:2021-07-04 08:45:49
【问题描述】:

我无法在 alpine docker 映像上安装 ruby​​ 的 gem。我尝试了与其他问题不同的方法来解决ERROR: While executing gem ... (Gem::FilePermissionError),但有适用于 Ubuntu 或 Mac OS 的解决方案。

部分docker文件代码:

RUN set -ex \
    && apk add --no-cache --update ruby ruby-dev ruby-bundler \
    && gem install --no-document --source https://rubygems.org --version 3.6.6 inspec

输出:

+ apk add --no-cache --update ruby ruby-dev ruby-bundler
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
(1/11) Installing yaml (0.2.5-r0)
(2/11) Installing ruby-libs (2.7.3-r1)
(3/11) Installing ruby (2.7.3-r1)
(4/11) Installing ruby-etc (2.7.3-r1)
(5/11) Installing ruby-io-console (2.7.3-r1)
(6/11) Installing ruby-bundler (2.2.20-r0)
(7/11) Installing libgmpxx (6.2.1-r0)
(8/11) Installing gmp-dev (6.2.1-r0)
(9/11) Installing libucontext (1.1-r0)
(10/11) Installing libucontext-dev (1.1-r0)
(11/11) Installing ruby-dev (2.7.3-r1)
Executing busybox-1.33.1-r2.trigger
Executing glibc-bin-2.33-r0.trigger
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link

OK: 1409 MiB in 141 packages
+ gem install --no-document --source https://rubygems.org --version 3.6.6 inspec
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/lib/ruby/gems/2.7.0 directory.
The command '/bin/sh -c set -ex     && apk add --no-cache --update ruby ruby-dev ruby-bundler     && gem install --no-document --source https://rubygems.org --version 3.6.6 inspec' returned a non-zero code: 1 ```

【问题讨论】:

  • 这很奇怪,我也突然在本地构建没有问题的图像上遇到同样的问题,并且以前在 dockerhub 上构建没有问题。如果我找到解决方案,我会在这里发布。
  • 虽然我还没有找到原因,但我看到使用 alpine 3.13 它可以在 dockerhub 上正确构建,而 alpine 3.14 失败了。你能确认一下吗?
  • @DannyB 是的,我对 3.14 也有同样的失败。看起来很奇怪

标签: ruby docker alpine


【解决方案1】:

这似乎是早于20.10.4 的 docker 版本的问题,在撰写本文时,DockerHub 运行的是旧版本。

选项 1:

如果您可以控制 docker 引擎的版本,请将其升级到最新版本(cmets 建议至少版本 20.10.4)。

选项 2:

使用FROM alpine:3.13

使用最新的 alpine (3.14) 它会中断。

选项 3:

使用官方的 ruby​​ alpine 图像。我用FROM ruby:3-alpine 测试过。

参考资料:

【讨论】:

  • 我发现这是最近的docker引擎解决的问题,DockerHub中还没有使用。为子孙后代相应地更新了答案。
  • 我在 CircleCI 上构建时遇到了同样的问题,并通过将 Docker 版本更新到 20.10.6 来修复它
  • 感谢您确认@m90,我已经用“升级docker”解决方案更新了答案。
  • 为了进一步细化这一点,我可以告诉我们在 20.10.3 版本上存在完全相同的错误,但升级到 20.10.8 修复了它,所以我认为它与 20.10 之前的版本无关。 0.
  • 更新 docker 确实为我解决了这个问题,但是,我在 20.10.2 上遇到了与 @JakobRasmussen 在上面类似的 dot 版本上遇到的相同问题。我更新到 Docker 版本 20.10.12,构建 e91ed57,它为我解决了这个问题。
猜你喜欢
  • 2015-02-13
  • 2019-01-10
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 2018-10-29
  • 1970-01-01
相关资源
最近更新 更多