在我的笔记本电脑上,我想限制容器的互联网连接。但我还想从主机的 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]]-[~]
└─$