Alpine Docker错误:无法锁定数据库:权限被拒绝错误:无法打开apk数据库:权限被拒绝

Vla*_*159 20 testing automated-tests docker alpine-linux testcafe

所以我使用了testcafe的默认docker,它在docker hub上是testcafe/testcafe,我必须运行一些testcafe脚本.

但是,我需要将错误触发的屏幕截图上传到我可以在docker镜像运行完毕后查看它的某个地方.

我正在使用使用bash的imgur程序,所以我重新做了一些事情,使它兼容并且一切正常,除了我需要卷曲.我试过跑步

apk add curl
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误

ERROR: Unable to lock database: Permission denied ERROR: Failed to open apk database: 
Run Code Online (Sandbox Code Playgroud)

现在我没有这意味着我没有权限这样做但是我可以解决这个问题,有一些方法可以成为root(这是在bitbucket管道中).

我真的不想创建自己的docker.

另请注意我发现的与此相关的所有问题都是关于在创建docker时安装,但我的问题是如何在创建docker之后执行此操作.thx(一个很好的答案是保存屏幕截图的另一种方法,但最好不用ssh).

小智 30

希望这对任何对创建新容器不感兴趣的人有所帮助。

如果您尝试像这样进入您的 docker 容器:

docker exec -it <containername> /bin/sh

相反,试试这个:

docker exec -it --user=root <containername> /bin/sh


pet*_*nek 15

对于 Docker 容器来说很简单:

docker exec -it --user root container-name sh
Run Code Online (Sandbox Code Playgroud)

对于 Kubernetes Pod 来说,情况稍微复杂一些。如果您的映像是使用非 root 用户构建的,并且您无法在集群内使用 root 用户运行 pod,则需要使用以下方法安装软件包:

  1. 识别 pod 正在使用的用户
  1. 创建一个新的Dockerfile
  1. 像这样配置它
FROM pod-image-name:pod-image-tag

USER root

RUN apk update && apk add curl

USER the-original-pod-user
Run Code Online (Sandbox Code Playgroud)
  1. 然后构建它
docker build -t pod-image-name:pod-image-tag-with-curl .
Run Code Online (Sandbox Code Playgroud)
  1. 并将集群内部署/pod 的映像从pod-image-name:pod-image-tag更改为pod-image-name:pod-image-tag-with-curl


Pen*_*eng 10

For those seeing this error using a Dockerfile (and coming here via a Google search): add the following line to your Dockerfile:

USER root
Run Code Online (Sandbox Code Playgroud)

  • 如果我不想使用`root`。我应该在命令RUN addgroup -S something &amp;&amp; adduser -S -G something some中添加什么以使其运行`apk add`? (4认同)

小智 10

docker exec -it --user=root {containername} bash
Run Code Online (Sandbox Code Playgroud)

这样我就可以执行 apk-update


Nei*_*eil 8

对于那些在运行 Jenkins 管道脚本(并通过 Google 搜索到达)时看到此错误的人,请在启动 Docker 映像时使用以下内容:

node('docker') {
  docker.image('golang:1.14rc1-alpine3.11').inside(' -u 0') {
    sh 'apk add curl'
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)


mml*_*mla 6

最好的解决方法是在 docker 构建失败的行USER <youruser> 之后放置。在大多数情况下,USER直接在命令或入口点上方添加该行是安全的。

例如:

FROM python:3.8.0-alpine

RUN addgroup -S app && adduser -S -G app app

RUN apk add --no-cache libmaxminddb postgresql-dev gcc musl-dev

ADD . .

USER app

ENTRYPOINT ["scripts/entrypoint.sh"]

CMD ["scripts/gunicorn.sh"]
Run Code Online (Sandbox Code Playgroud)