Docker:WARNING: Published ports are discarded when using host network mode 解决方法

在Docker中,使用主机网络模式(host network mode)时,容器将共享主机的网络命名空间,这意味着容器将直接使用主机的网络接口和端口。因此,当你尝试通过Docker的发布端口功能(publish a port)将容器的端口映射到主机时,实际上不会发生任何映射,因为容器已经直接使用主机的网络,所以不需要进行端口映射。

解决方法:

如果你需要将容器端口映射到主机端口,你应该使用桥接模式(bridge mode)而不是主机网络模式。桥接模式是Docker的默认网络模式,在这种模式下,Docker会为容器配置独立的网络命名空间,并通过Docker网络接口将容器端口映射到主机端口。

  1. 移除容器时使用桥接模式启动它,不要使用--net=host参数。

  2. 如果需要访问主机的网络接口或服务,可以通过主机模式(host mode)来绑定特定的主机资源(如/etc/hosts或者特定的主机网络接口)到容器中,而不是使用主机网络模式。

例如,启动一个使用桥接模式的容器,而不是主机网络模式:

docker run -d -p 8080:80 myimage
这里-d表示后台运行,-p 8080:80表示将容器内的80端口映射到主机的8080端口

但是一般不建议这么干,因为这样docker和宿主共享网络不是很安全,一般都建议在docker中建立连接通过别名构建docker之间通信

docker network create testnet

 然后容器中构建服务的时候加上 --network 

docker run -d -p 4000:4000 --network testnet --network-alias yourservice --name  yourservice  yourservice 

这样docker之间就可以通过别名来访问,宿主机和docker有效隔离

相关推荐

  1. vue中404解决方法

    2024-07-10 20:16:03       32 阅读
  2. vue中404解决方法

    2024-07-10 20:16:03       19 阅读
  3. Linux 忘记密码解决方法

    2024-07-10 20:16:03       22 阅读
  4. 算法=问题的解决方法

    2024-07-10 20:16:03       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 20:16:03       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 20:16:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 20:16:03       4 阅读
  4. Python语言-面向对象

    2024-07-10 20:16:03       7 阅读

热门阅读

  1. Docker 入门篇(十 一)-- 网络配置总结

    2024-07-10 20:16:03       14 阅读
  2. 设计模式——原型模式

    2024-07-10 20:16:03       12 阅读
  3. grblHAL的代码学习笔记和解读

    2024-07-10 20:16:03       11 阅读
  4. Spring Boot中的多租户架构实现

    2024-07-10 20:16:03       11 阅读
  5. 单链表的学习与基础运用p

    2024-07-10 20:16:03       15 阅读
  6. 如何正确使用Redisson实现分布式锁

    2024-07-10 20:16:03       9 阅读