【问题标题】:docker-compose exec command works into container but not from my host machinedocker-compose exec 命令适用于容器,但不适用于我的主机
【发布时间】:2018-01-31 18:54:13
【问题描述】:

我需要在 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 参数。再次,它工作正常。

但是如果我从我的主机运行:

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

提前感谢。

【问题讨论】:

标签: linux docker docker-compose selenium-chromedriver


【解决方案1】:

这会失败,因为$(..) 在您的主机上运行,​​并且它的结果被传递到 docker 映像中。

要让它在 docker 镜像中发生,您可以将未扩展的命令传递给镜像中的 shell,然后让该 shell 展开并运行命令:

docker-compose exec chromedriver bash -c \
    "chromedriver --url-base=/wd/hub --whitelisted-ips=\$(getent hosts php-fpm | cut -d' ' -f1)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2018-11-08
    相关资源
    最近更新 更多