Rootless Docker使用--network host时应用端口监听异常问题
Docker Host网络模式在Rootless模式下无法正常端口监听的问题
我有一个绑定端口并监听连接的应用,此前通过Docker的--publish 8000:8000参数暴露容器内端口,可正常接收外部连接。近期需要添加--network host选项,让容器内的服务器能访问主机的其他网络接口,但发现--publish与--network host无法同时生效。
按照Docker官方文档示例,执行以下命令本应可行:
- 在一个终端运行:
docker run --network host --rm --tty --interactive ubuntu:trusty nc -lkv 0.0.0.0 8000 - 在另一个终端运行并发送内容:
nc localhost 8000
但实际客户端无法连接到容器内的服务器。若去掉--network host并添加--publish 8000:8000参数,客户端可正常连接,但我的应用需要同时具备端口监听和访问主机其他接口的能力。
当前防火墙已关闭:
sudo ufw status Status: inactive
我使用的是Ubuntu 22.04系统上的Docker Engine(非Docker Desktop),环境信息如下:
Client: Docker Engine - Community Version: 26.1.3 API version: 1.45 Go version: go1.21.10 Git commit: b72abbb Built: Thu May 16 08:33:29 2024 OS/Arch: linux/amd64 Context: rootless Server: Docker Engine - Community Engine: Version: 26.1.3 API version: 1.45 (minimum version 1.24) Go version: go1.21.10 Git commit: 8e96db1 Built: Thu May 16 08:33:29 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.32 GitCommit: 8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0 rootlesskit: Version: 2.0.2 ApiVersion: 1.1.1 NetworkDriver: slirp4netns PortDriver: builtin StateDir: /run/user/1000/dockerd-rootless slirp4netns: Version: 1.0.1 GitCommit: 6a7b16babc95b6a3056b33fb45b74a6f62262dd4
更新:若使用sudo运行服务器则可正常工作,推测问题与Rootless运行上下文有关。可行的命令如下:
- 在一个终端运行:
sudo docker run --network host --rm --tty --interactive ubuntu:trusty nc -lkv 0.0.0.0 8000 - 在另一个终端运行并发送内容:
nc localhost 8000
内容的提问来源于stack exchange,提问作者Osurac
相关产品推荐
相关产品推荐

