首页 > 解决方案 > 权限错误 - MacOS - 打开 /Users/username/.docker/.token_seed: 权限被拒绝

问题描述

我对Docker和比较bash陌生macOS

当我运行bash正在执行某些自动化和运行的脚本时,出现权限被拒绝错误docker-compose。如果我运行它,它可以工作,sudo但我需要在没有sudo工作任务的情况下运行它。最初,此bash脚本会在较早的某个地方出现错误,copy并出现权限被拒绝错误(没有sudo),但我设法通过运行chown -R $USER:$USER /path/to/directorywhere /path/to/directoryis where this bashscript 来解决此问题。

我需要在bash没有sudo. 从下图中可以看出,该命令与sudo(绿色)一起使用。脚本在没有运行时失败,sudo如红色所示。

我该怎么做才能摆脱红色下划线的权限被拒绝错误?提前致谢。

使用 Sudo 但不使用 Sudo 的 Bash 脚本的图片

标签: bashmacosdockerdocker-composesudo

解决方案


在 docker compose 和 dockerfiles 中,默认用户是 root。使用与运行脚本相同的用户。您可以以您在容器主机上登录的用户身份运行容器。

您可以在主机上创建具有相同 ID 的相同用户,建议在使用 docker 卷时这样做。

例如,

运行 docker build 时

docker image build \
    --build-arg USER_ID=$(id -u ${USER}) \
    --build-arg GROUP_ID=$(id -g ${USER}) \
    -t php_test \
    .

如果您想以同一用户身份运行脚本,您在主机上使用的用户将传递到 docker 容器。

码头工人文件

FROM jtreminio/php:7.2

ARG USER_ID
ARG GROUP_ID

RUN if [ ${USER_ID:-0} -ne 0 ] && [ ${GROUP_ID:-0} -ne 0 ]; then \
    userdel -f www-data &&\
    if getent group www-data ; then groupdel www-data; fi &&\
    groupadd -g ${GROUP_ID} www-data &&\
    useradd -l -u ${USER_ID} -g www-data www-data &&\
    install -d -m 0755 -o www-data -g www-data /home/www-data

和参数被传递,容器的用户和组被删除,并使用运行 docker build 命令时提供的参数再次创建USER_IDGROUP_ID

你的场景你可能不需要走这么远。以下文章中的代码示例https://jtreminio.com/blog/running-docker-containers-as-current-host-user/


推荐阅读