繁体   English   中英

如何在 docker-compose 容器中设置用户 ID

[英]How to set userid in docker-compose container

我正在 docker-compose.yaml 文件中启动一些 docker 容器(运行网站)。 我希望网站的代码位于主机上的目录中,文件由将运行sudo docker-compose up -d以启动容器的用户拥有。 这样用户就可以轻松地阅读或编辑它们,或者添加新的。 docker 容器中的网站也会创建一些文件,我希望它们也属于正确的用户。

因此,如果要运行网站脚本的 docker 容器的用户与运行 docker-compose 的用户具有相同的 UID 和 GID,那就太好了。

到目前为止,我已经通过计算 UID 和 GID(使用id )并将它们硬编码到 docker-compose.yaml 文件中来实现这一点。

但是,如果我可以将此 docker-compose 文件移动到 UID 和 GID 可能不同的其他机器上,那就太好了。

UID 已经在环境中可用,我猜 GID 可能会以某种方式放在那里。 有没有办法设置这些并将它们传递到 docker 容器中,以便它创建和使用具有相同 UID 和 GID 的用户,因此文件具有正确的所有权和权限?

对我来说有趣的是,您设置了一个好的解决方案,您可以在撰写文件中设置 UID 和 GID,并且您对 go 很好。 您是否通过创建具有该 UID 和 GID 的用户来破解容器的入口点,然后启动您的主服务? 更常见的是在构建时硬编码 UID 和 GID,在构建时将用户设置为您想要的用户,然后让入口点运行您的服务。

(如果 Docker 用户 UID/GID 和文件夹位置的 UID/GID 之间的绑定挂载不匹配,那么当您需要使用绑定挂载时,这确实会导致经典的 Docker 难题 - 我怀疑这是导致任何问题的原因您现在正在使用的机制。我已经在共享绑定挂载上设置了文件权限(这是您在运行容器和容器的人之间共享文件的方式)之前,使用 ACL,它可能有点笨拙,但可以如果你小心点就改正了。) 编辑:David Maze 刚刚在你原来的帖子上留下了一个很好的评论,也许 Docker 甚至不是你设置这个服务器的正确工具。 我认为您应该在着手处理诸如手动处理 ACls 之类的事情之前强烈考虑他的建议。

无论如何,如果你现在拥有的足够好,那么它就足够了,我想。 如果你真的做得很好,只是在你的 compose 文件中编辑 UID 和 GID,你可以用这样的节将它们传递给容器:

    environment:
      - UID=${UID:?err}
      - GID=${GID:?err}

当您开始运行容器时,这会将 UID 和 GID 从您自己的环境中拉出,如果由于某种原因未设置 UID 或 GID,则会引发错误并阻止容器启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM