Docker Compose的network_mode: "host"无法正常工作

11
我的Docker化应用程序需要访问本地主机网络上的某些内容,如果没有 "network_mode:“host”",则无法实现。
version: '3.4'
services:
  app:
    network_mode: "host"
    image: node:latest
    volumes:
      - .:/usr/app
      - node_modules:/usr/app/node_modules
    working_dir: /usr/app
    ports:
      - 3000:3000

volumes: 
  node_modules:

如果我注释掉network_mode: "host",我的应用程序在http://localhost:3000上可以完美运行。如果我重新添加它,则仍然可以运行,但无法再通过http://localhost:3000访问。
编辑:我刚在Ubuntu上测试了一个“hello world”程序,它能够正常工作,但在Mac上无法正常工作,Mac似乎不支持network_mode: "host"

本地主机:3000仍然404。 - Dave
你是从同一台机器还是不同的机器访问URL? - Akshay barahate
同一台机器,在我的本地Mac上。我知道端口3000在Docker内部正在监听,因为我可以从Docker exec中进行curl,但是无法从Docker外部进行。 - Dave
1
@DavidMaze 为什么我不使用Docker呢?Node.js安装起来很麻烦,版本众多,平台和不兼容性问题也很多。 - Dave
@Dave,你删掉仓库了吗?我想检查一下你的问题。 - Akshay barahate
显示剩余6条评论
1个回答

28

目前写下这篇文章时,Mac存在问题,问题在于Docker在Mac中使用一个Linux虚拟机来运行容器,所以当您使用network_mode: "host"时,它只对虚拟机网络有效,而不是有效的Mac本身 :( 更多信息请参见此处

作为替代方案,请不要使用network_mode: "host",而是将其保留在桥接模式(默认值),然后配置您的服务,使其不连接到localhost:xxxx,而连接到host.docker.internal:xxxx


这个答案应该被标记为正确。 - Harith
请标记此答案为正确!100% - Kevin Christian
我花了4个小时来调试这个问题。我的代码在Linux上可以运行,但是在Mac上无法连接。 - Atul Vinayak
1
在撰写本文时,Mac上仍存在网络模式问题。 - undefined

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