docker : execute commands as a non-root user

标签 docker dockerfile docker-machine

早些时候,我曾经使用以下命令运行:

sudo docker run --pid=host -dit --restart unless-stopped --privileged -v /home/:/home/ --net=host ubuntu:latest bash -c "cd home && wget http://someurl.com/a.js -O /home/a.js && node a.js && tail -F anything"

默认情况下,此命令将启动具有 root 用户的容器。所以wget http://someurl.com/a.js -O /home/a.js命令过去可以正常工作,没有任何问题。

现在我想从容器中获取声音。为了确保容器和主机同时播放音频,我使用了pulseaudio套接字,否则我曾经在 alsa 捕获声卡时出现设备繁忙错误。

这是我用来完成我的要求的新命令:
sudo docker run --pid=host -dit --restart unless-stopped --privileged --env PULSE_SERVER=unix:/tmp/pulseaudio.socket --env PULSE_COOKIE=/home/$USER/pulseaudio.cookie --volume /tmp/pulseaudio.socket:/tmp/pulseaudio.socket --volume /home/$USER/pulseaudio.client.conf:/etc/pulse/client.conf --user $(id -u):$(id -g) -v /home/:/home/ --net=host ubuntu:latest bash -c "cd home && wget http://someurl.com/a.js -O /home/a.js && node a.js && tail -F anything"

pulseaudio 的问题是当 docker 中的用户是 root 用户时它不起作用,因此我必须在运行命令中使用 --user $(id -u):$(id -g) 。
现在由于用户不是 root,wget http://someurl.com/a.js -O /home/a.js命令给出权限被拒绝错误。

我希望在启动容器时执行此 wget 命令。
我想以非 root 身份运行容器,并且还能够执行 wget 命令。

有什么解决方法吗?

最佳答案

1-使用非root用户执行docker命令
如果这是您的情况并且不想以 root 用户运行 docker 命令,请遵循此 link .
创建一个 docker 组并将您当前的用户添加到其中。

$ sudo groupadd docker
$ sudo usermod -aG docker $USER
2- 在 docker 中执行命令!非root用户
如果我是对的,您想在 docker 中使用非 root 用户而不是 root 用户!
在 docker 中提供给您的用户的 uid 与您正在使用的根 docker 镜像相关,例如 alphineubuntu:xenial如前所述 in this article
但是您可以通过在您的 Dockerfile 中进行如下更改来简单地更改 docker 中的用户。并添加一个新用户并使用它。像这样:
 RUN adduser -D myuser
 USER myuser
 ENTRYPOINT [“sleep”]
 CMD [“1000”]
然后在 docker 文件中,如果您获得 /bin/bash并执行 id里面的命令,你会看到docker里面用户的id被改变了。
更新:
如果你已经准备好使用 Dockerfile,那么创建一个新的 Dockerfile ,例如它的名字是 myDocker , 并将代码放在下面:
 from myDockerfile
 RUN adduser -D myuser
 USER myuser
 ENTRYPOINT [“sleep”]
 CMD [“1000”]
然后保存这个文件,并构建它:
$ docker build -t myNewDocker .
$ docker run myNewDocker <with your options>

关于 docker : execute commands as a non-root user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54996027/

相关文章:

php - 根据用户的 IP 地址位置将用户重定向到同一 Web 应用程序的不同域

linux - docker run 中的 Dockerfile 入口点脚本参数

docker - 将 Docker Machine 与 Swarm 一起使用和通过 Docker 守护进程使用 Swarm 有什么区别?

docker - 以代码 0 退出

docker - 通过 VM 在 localhost 上运行 docker 容器

node.js - 如何将 NodeJS 与 Angular 连接(在 Nginx 中)

docker - 链接数据剧院| standard_init_linux.go:195:导致 “no such file or directory”的exec用户进程

javascript - 容器与宿主机共享 `node_modules`文件夹

symfony - 如何正确检查是否安装了 Symfony 应用程序?

Docker 在尝试使用 nodejs 、 nodemon 和子文件夹时退出并显示代码 0