내 노트북에서 컨테이너의 인터넷 연결을 제한하고 싶습니다. 하지만 호스트의 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
작동하지 않습니다. 또한 인수를 사용하여 컨테이너를 실행해 보았습니다 -p 0.0.0.0:8088:80
. 같은 질문.
그러나 nginxnet 네트워크를 사용하지 않고 컨테이너를 시작하면 포트가 올바르게 전달됩니다.
docker port cntnginx
또한 후자의 경우 예상되는 컨테이너-호스트 포트 매핑이 표시되지만 내부 전용 네트워크를 사용할 때는 그렇지 않습니다.
무엇을 제공합니까?
저는 Docker v20.10.19 및 Containerd v1.6.8과 함께 Arch Linux를 사용하고 있습니다.
참고: 브라우저의 주소 표시줄에 오타를 두지 않았습니다. 저는 포트를 8088로 지정했습니다. 나는 또한 컬을 사용해 보았습니다.
답변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]]-[~]
└─$