docker-compose exec命令适用于容器,但不适用于我的主机

时间:2018-01-31 18:54:14

标签: linux docker docker-compose selenium-chromedriver

我需要在一个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。仅用于发展环境。但我想知道为什么这个命令不起作用。

谢谢你。

1 个答案:

答案 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)"