Docker在“host”网络模式下不会将端口绑定到主机。

4

在我的开发机上,我试图让一个Docker容器连接到主机上的MySQL服务器。为了做到这一点,我将网络模式设置为"host",如下所示:

phpfpm:
  image: mageinferno/magento2-php:7.0.8-fpm-0
  container_name: php7fpm
  restart: always
  hostname: phpfpm
  ports:
    - "9000:9000"
  environment:
    - APP_MAGE_MODE=developer
  volumes:
    - /Users:/Users
    - /usr/local/var/log/nginx:/var/www/logs
  net: "host"

问题是我启动docker容器后,无法从主机上的本地telnet到localhost 9000。 当容器在桥接模式下运行时,连接到9000上的容器没有问题。 docker ps命令显示:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6de4c973a34a mageinferno/magento2-php:7.0.8-fpm-0 "/usr/local/bin/start" 4 seconds ago Up 3 seconds php7fpm
为什么容器不将端口绑定到主机上? 我错过了什么?
我正在使用Docker for Mac(版本1.12.0-rc3-beta18(构建:9996))的OS X 10.10。

你在Windows上使用Docker Machine吗? - Nguyen Sy Thanh Son
@NguyenSyThanhSon 我正在使用 Docker for Mac。 - snez
请尝试使用telnet连接192.168.99.104:9000。 - Nguyen Sy Thanh Son
@NguyenSyThanhSon不起作用,超时。Docker使用172.16.4.20作为地址,尝试通过telnet连接被拒绝。如果我没记错的话,192.168.99.104是旧的vagrant虚拟机使用的地址?Docker for Mac使用xhyve。 - snez
1个回答

2

你为什么要使用主机网络?它设置起来可能有些棘手,而且大多数情况下只适用于特殊的用例。至少,你需要确保Docker主机通过以下方式允许该端口:

iptables -I INPUT 1 -p tcp -m tcp --dport 9000 -j ACCEPT

否则,最好还是坚持使用桥接模式。


我用的是Mac电脑,在"Docker for Mac"发布之前,我不会使用docker进行开发,因为它存在很多问题。现在有了Docker for Mac,我想先使用一个独立的php7容器,而不是我的php5.6本地设置,但是将整个开发环境迁移到容器中会有些麻烦,而且我还不知道Docker for Mac是否解决了过去与Mac电脑的问题,所以我只想将php7放进容器里,其他东西不变。我没有iptables,但是"nc -l 9000"完全可以运行。 - snez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接