我需要在一个chromedriver容器中运行一个命令,从php-fpm容器传递一个ip。 php-fpm容器主机名是' php-fpm'。两个容器都在同一个网络中。所以这些人可以互相看见。
如果我访问chromedriver容器并运行此命令,它可以正常工作:
chromedriver --url-base=/wd/hub --whitelisted-ips=$(getent hosts php-fpm | cut -d' ' -f1)
我期待的是$(getent hosts php-fpm | cut -d' ' -f1)
从php-fpm容器中获取ip并分配给whitelisted-ips param。再次,它正常工作。
但是如果我跑的话,可以从我的主机上找到:
docker-compose exec chromedriver chromedriver --url-base=/wd/hub --whitelisted-ips=$(getent hosts php-fpm | cut -d' ' -f1)
getent命令不会返回php-fpm的ip。 有没有考虑转义字符,额外的参数或类似的东西这个exec命令工作?
我可以在没有ip的情况下运行chromedriver。仅用于发展环境。但我想知道为什么这个命令不起作用。
谢谢你。
答案 0 :(得分:3)
此操作失败,因为$(..)
在您的主机上运行,并且其结果将传递到docker镜像。
要在docker镜像中实现它,您可以将未扩展的命令传递给图像中的shell,并让该shell展开并运行命令:
docker-compose exec chromedriver bash -c \
"chromedriver --url-base=/wd/hub --whitelisted-ips=\$(getent hosts php-fpm | cut -d' ' -f1)"