我需要从一个php / php-7.1容器内执行一些命令,作为一个特殊的(标准)用户和PHP-fpm守护进程使用的“ www-data:www-data ”组。
www-data在主机上同时以用户和组的forms存在,并且条目存在于:
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin www-data:x:33: 无论如何,当容器运行时,我首先得到www-data uid和gid,如下所示:
// con_php is the running container's name echo $(docker exec -it con_php bash -c 'echo "$(id -u www-data)"''":"''"$(id -g www-data)"') // outputs 33:33, great !
然后我使用这个(作为一个命令行replace)来提供给我需要在容器中运行的实际命令提供的–user选项。 我现在有:
docker exec \ --user $(docker exec -it con_php bash -c 'echo "$(id -u www-data)"''":"''"$(id -g www-data)"') \ con_php \ bash -c 'cd /var/www/project ; touch test.txt'
不幸的是 ,在执行时,Docker会抱怨并输出一个错误:
:组文件中没有匹配的条目
以下方法(带有临时variables的bash脚本)导致相同的问题:
#! /bin/bash usr=$(docker exec -it con_php bash -c 'echo "$(id -u www-data)"''":"''"$(id -g www-data)"') echo "» $usr" docker exec --user $usr con_php bash -c 'cd /var/www/project ; touch test.txt'
»33:33
:组文件中没有匹配的条目
感谢您的帮助。
从docker集装箱内检索数据有时候会派上用场。
当心,如果你使用echo收集输出作为一个字(或一行)。 确保使用-n选项来防止后面的换行符被预置。
$ docker exec -it my_container bash -c 'echo -n "$(…)"'
否则,您在使用输出时可能会遇到失败/不当行为。
像在Bash进程命令中的参数一样。