传递Docker中的用户凭据

时间:2018-03-21 09:57:02

标签: docker

使用Docker应用程序,我想将应用程序作为守护程序运行:

docker run -v $(pwd)/:/src -dit --name DOCKER_NAME my-app

然后从挂载的驱动器执行Python脚本:

docker exec -w /src DOCKER_NAME python my_script.py

这个Python脚本会生成一些文件和图形,我稍后会想要使用它们。但是,我有一个问题,即Docker应用程序中生成的文件与我的外部环境具有不同的权限。

[2D] drwxrwxr-x  5 jenkins_slave jenkins_slave    4096 Mar 21 10:47 .
[2D] drwxrwxr-x 24 jenkins_slave jenkins_slave    4096 Mar 21 10:46 ..
[2D] drwxrwxr-x  2 jenkins_slave jenkins_slave    4096 Mar 21 10:46 my_script.py
[2D] -rw-r--r--  1 root          root           268607 Mar 21 10:46 spaider_2d_0_000.png
[2D] -rw-r--r--  1 root          root           271945 Mar 21 10:46 spaider_2d_0_001.png
[2D] -rw-r--r--  1 root          root           283299 Mar 21 10:46 spaider_2d_0_010.png

在上面的示例中,后面的3个文件是从Docker挂载中生成的。

我能否以任何方式指定Docker应用程序应使用与外部环境相同的凭据运行,和/或生成的文件应具有某些权限?

1 个答案:

答案 0 :(得分:1)

使用Docker的-u/--user指令设置用户和组来运行容器。

例如,如果我想通过root而不是我自己运行容器,我可以执行以下操作:

user=$(id -u)
group=$(cut -d: -f3 < <(getent group $(whoami)))

docker run -it -u "$user:$group" <CONTAINER_NAME> <COMMAND>

在容器内部,您会发现用户ID已更改为主机中的用户ID。

$ whoami
whoami: unknown uid 1000

是的,用户名变为unknown,但我猜你不会理会它。你这样做是为了设置正确的权限,而不是得到一个很好的显示名称,对吗?

P.S。,文档:https://docs.docker.com/engine/reference/run/#user