如何解决运行“docker exec”时发布端口
在 docker conrainer 中,在 Windows 机器上我必须运行一些 Laravel 测试,其中运行一个命令,产生以下异常跟踪:
异常跟踪:
无法连接到本地主机端口 8000:连接被拒绝
1
Facebook\WebDriver\Remote\HttpCommandExecutor::execute(Object(Facebook\WebDriver\Remote\WebDriverCommand))
/var/www/html/vendor/php-webdriver/webdriver/lib/Remote/RemoteWebDriver.php:135
2
Facebook\WebDriver\Remote*RemoteWebDriver::create("http://localhost:8000",对象(Facebook\WebDriver\Remote\DesiredCapabilities))*
/var/www/html/tests/DuskTestCase.php:44
要启动 docker 容器,请运行以下命令
docker exec -it crawler-php bash
然后在容器内运行 phpunit 测试,使用 RemoteWebDriver
产生异常我怀疑该异常是由端口 8000 未正确公开或发布引起的,但我是 docker 新手,不确定如何修正该问题。 (我也不完全确定是我必须发布还是公开端口 8000)
我知道可以运行命令 docker run -p 8000:8000...
来运行一个容器,其端口 8000 已发布并映射到我的本地机器端口 8000,但我不确定如何在 docker exec
时进行类似的容器端口映射正在使用 {1}} 而不是 docker run
解决方法
对于 Windows,
在主机上,您可以使用 netsh
示例,
netsh interface portproxy add v4tov4 listenaddress=(local address) listenport=(local port) connectaddress=(destination address) connectport=(destination port)
对于 Linux, 在主机上,要在 iptables 上创建规则,
iptables -t nat -D DOCKER ! -i docker0 -p tcp --dport 3306-j DNAT --to-destination 172.17.0.2:3306
当数据包的目的地是主机上的端口 3306
时,将数据包转发到具有 ip 172.17.0.2
和端口 3306
的容器。
-i 参数是docker接口。
从我可以找到的简单性来看,无需创建新容器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。