之前我是用以下命令运行:
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 socket,否则会出现设备繁忙错误,因为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"
问题在于当Docker内的用户为root用户时,pulseaudio无法正常工作,因此我必须在运行命令中使用--user $(id -u):$(id -g)。现在由于用户不是root用户,wget http://someurl.com/a.js -O /home/a.js
命令会出现权限被拒绝的错误。
我希望每次启动容器时都能执行此wget命令。我想以非root用户身份运行容器,并能够执行wget命令。
是否有任何解决方法?