66

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

但是,我需要将错误触发的屏幕截图上传到某个地方,以便在 docker 映像运行完成后稍后查看它。

我正在使用使用 bash 的 Imgur 程序,所以我重新做了一些事情以使其与 sh 兼容并且一切正常,除了我需要 curl。我试着跑步

apk add curl

但我得到了错误

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

现在我不,这意味着我无权执行此操作,但我可以解决这个问题吗?是否有某种方法可以成为 root(这是在 bitbucket 管道中)。

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

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

4

6 回答 6

77

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

USER root
于 2019-06-15T19:43:47.207 回答
41

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

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

docker exec -it <containername> /bin/sh

相反,试试这个:

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

于 2020-11-05T11:23:39.387 回答
8

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

node('docker') {
  docker.image('golang:1.14rc1-alpine3.11').inside(' -u 0') {
    sh 'apk add curl'
    ...
  }
}
于 2020-02-20T18:56:17.003 回答
8

最好的解决方法是放置在USER <youruser> docker build 失败的行之后。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"]
于 2019-11-24T22:01:54.560 回答
6
docker exec -it --user=root {containername} bash

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

于 2021-01-13T09:19:16.173 回答
0

我已经解决了使用 root 用户执行“docker build -t”命令的相同问题:

#docker build -t $DOCKER_IMAGE

于 2021-11-22T15:52:13.423 回答