私のラップトップでコンテナのインターネット接続を制限したいと思います。ただし、ホストの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]]-[~]
└─$