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

时间:2018-06-06 19:02:31

标签: docker alpine testcafe

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

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

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

apk add curl

但我收到了错误

ERROR: Unable to lock database: Permission denied ERROR: Failed to open apk database: 

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

我真的不想创建自己的码头工具。

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

5 个答案:

答案 0 :(得分:7)

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

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

docker exec -it <containername> /bin/sh

相反,请尝试以下操作:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

docker exec -it --user=root {containername} bash

有了这个,我就可以执行 apk-update

答案 3 :(得分:1)

对于那些使用Dockerfile看到此错误的人(并通过Google搜索来到这里):将以下行添加到您的Dockerfile中:

USER root

答案 4 :(得分:1)

最好的解决方法是将USER <youruser> 之后放在您的docker构建失败的行中。在大多数情况下,可以在命令或入口点的正上方添加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"]