docker - Docker:以非 root 用户身份执行命令
问题描述
早些时候我曾经使用以下命令运行:
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 命令,请点击此链接。创建一个 docker 组并将您当前的用户添加到其中。
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
2- 在 docker 中执行命令!非root用户
如果我是对的,您想在 docker 中使用非 root 用户而不是 root!
在 docker 中给您的用户的 uid 与您正在使用的根 docker 映像相关,例如alphine
或ubuntu:xenial
如本文所述
Dockerfile
但是您可以通过在您的以下内容中进行一些更改并添加一个新用户并使用它来简单地更改 docker 内的用户。像这样:
RUN adduser -D myuser
USER myuser
ENTRYPOINT [“sleep”]
CMD [“1000”]
然后在 docker 文件中,如果你在其中获得/bin/bash
and executeid
命令,你会看到 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>
推荐阅读
- octave - GNU Octave 失败 hex2dec
- python - 如何在 Python3 中使用 pyclbr 搜索 __main__ 模块?
- r - 与R中的概率混淆
- javascript - 在使用 Node.js (WebSockets) 和 Javascript (WebRTC) 的简单的纯音频 WebRTC 调用中听不到对等方的声音
- matplotlib - Matplotlib 的背景颜色
- go - 将 uint32 拆分为两个 uint16
- c++ - 您能否检查是否使用标准 C++ 函数按下了 F 键(F1、F2 等)?
- math - 在给定 2 个点的 3D 空间中查找 Eclipse / 反抛物线方程
- python - 在python中以最小的时间复杂度循环长序列
- php - Docker Laravel Nginx,存储到 404 页面