在容器中使用“--internal”网络时,Docker 未将容器端口映射到主机

在容器中使用“--internal”网络时,Docker 未将容器端口映射到主机

在我的笔记本电脑上,我想限制容器的互联网连接。但我还想从主机的 IP 地址连接到容器,因此我需要端口映射/转发才能工作。问题是端口映射不适用于我的 docker 网络。不工作是指容器端口未映射到主机端口。

以下是我创建 docker 网络的方法:

docker network create -d bridge --attachable --internal nginxnet

我这样运行容器:

docker run --rm --name='cntnginx' -p 8088:80  --network=nginxnet  -d nginx:stable

这样容器就成功启动了。我可以使用容器的 IP 地址访问 Nginx 服务器。但访问它是127.0.0.1:8088行不通的。还尝试使用 argument 运行容器-p 0.0.0.0:8088:80。同样的问题。

但是,如果我不使用 nginxnet 网络启动容器,则端口会正确转发。

docker port cntnginx还显示了在后一种情况下预期的容器到主机的端口映射,但在使用仅限内部网络时则不会。

是什么赋予了?

我正在使用带有 Docker v20.10.19 和 containerd v1.6.8 的 Arch Linux。

注意:我在浏览器的地址栏中没有输入错误。我确保将端口指定为 8088。我还尝试使用curl。

答案1

命令docker参数--internal与您需要的冲突

--internal Restrict external access to the network

端口映射需要在一个子网中,这已经满足了,但是--internal像防火墙一样隔离它们,所以你可以删除它

┌──[[email protected]]-[~]
└─$ docker network create -d bridge --attachable nginx_net
7099c25e475dc829cc6102a168da473e5d9283b82c282d5cd230a40803811983
┌──[[email protected]]-[~]
└─$ docker run  --name=cnt_nginx -p 8088:80  --network=nginx_net  -d nginx
ceea597d085863adaab4d80de6e1e096bebedf8d3455b488e5b8cc6afffd9508
┌──[[email protected]]-[~]
└─$ curl 127.0.0.1:8088
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
┌──[[email protected]]-[~]
└─$

相关内容