[解決済み] docker がポートバインディングに IPv4 を使用するようにする
質問
ドッカーホストで、コンテナを1つ持っています。
dockerホストは、IPv4ではなく、IPv6インターフェイスにのみポートをバインドしています。
これは出力です。
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:55082 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::40280 :::* LISTEN -
tcp6 0 0 :::5432 :::* LISTEN -
tcp6 0 0 :::40122 :::* LISTEN -
tcp6 0 0 :::36378 :::* LISTEN -
tcp6 0 0 :::40543 :::* LISTEN -
tcp6 0 0 :::111 :::* LISTEN -
これで、ホストの40122ポートとコンテナの22ポートをリンクさせることができました。
そのコンテナにSSHで入りたいのですが、IPv6にしかバインドされていないため、入れません。
これは私のドッカーのバージョンです
Docker version 1.5.0, build a8a31ef
docker ps
201bde6c839a myapp:latest "supervisord -n" 3 weeks ago Up 2 hours 0.0.0.0:40122->22/tcp, 0.0.0.0:40280->80/tcp, 0.0.0.0:40543->443/tcp myapp
を使って実行しました。
docker run -d -P -p 40122:22
netstat -tlna
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3031 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::6379 :::* LISTEN
ps補助
root 1 0.0 0.8 52440 16668 ? Ss 00:53 0:03 /usr/bin/python /usr/bin/supervisord -n
root 49 0.0 0.1 17980 3048 ? S 01:32 0:00 bash
root 64 0.0 0.1 46632 2712 ? S 01:32 0:00 su -l vagrant
vagrant 65 0.0 0.1 21308 3760 ? S 01:32 0:00 -su
root 288 0.0 0.1 17980 3088 ? S 02:01 0:00 bash
root 304 0.0 0.1 46632 2720 ? S 02:01 0:00 su -l vagrant
vagrant 305 0.0 0.1 21304 3804 ? S 02:01 0:00 -su
vagrant 308 0.0 3.7 429616 75840 ? Sl+ 02:01 0:05 python ./manage.py shell_plus
root 654 0.0 0.4 47596 9848 ? S 03:12 0:01 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root 655 0.0 0.3 90280 7732 ? S 03:12 0:00 nginx: master process /usr/sbin/nginx
www-data 656 0.0 0.1 90600 3624 ? S 03:12 0:00 nginx: worker process
www-data 657 0.0 0.1 90600 3624 ? S 03:12 0:00 nginx: worker process
www-data 658 0.0 0.1 90600 3624 ? S 03:12 0:00 nginx: worker process
www-data 659 0.0 0.2 90940 4500 ? S 03:12 0:00 nginx: worker process
root 660 0.0 0.2 61372 5332 ? S 03:12 0:00 /usr/sbin/sshd -D
root 669 0.0 0.4 37004 8892 ? Sl 03:12 0:01 redis-server *:6379
root 856 8.0 2.8 388720 57792 ? Sl 04:07 0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root 857 8.0 2.8 388720 57792 ? Sl 04:07 0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root 858 8.0 2.8 388720 57792 ? Sl 04:07 0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
root 859 8.0 2.8 388720 57792 ? Sl 04:07 0:18 /usr/local/bin/uwsgi --die-on-term --ini /var/www/conf/uwsgi.ini
vagrant 889 0.0 0.1 18692 2508 ? R+ 04:11 0:00 ps aux
どのように解決するのですか?
コメントで@daniel-tさんが指摘されているように
github.com/docker/docker/issues/2174
でIPv6へのバインディングのみを表示することについてです。
netstat
でのIPv6へのバインディング表示についてですが、これは問題ではありません。そのgithub issueに書いてある通りです。
プロキシを設定するとき、Docker はループバックアドレス '127.0.0.1' を要求しますが、Linux はこれが IPv6 に存在するアドレスであると認識し (::0 として)、両方で開きます (ただし正式には IPv6 ソケットです)。netstatを実行すると、これがIPv6であることがわかり、IPv4でリッスンしていることがわかります。少し設定をいじれば、Linux が行うこのトリックを net.ipv6.bindv6only = 1 と設定することで無効にできるかもしれません。
言い換えれば、IPv6 のみと表示されていても、net.ipv6.bindv6only の設定で IPv6 でのみバインドするように設定していなければ、IPv4 で通信することが可能なのです。はっきり言って、net.ipv6.bindv6onlyは0であるべきです - 実行できます
sysctl net.ipv6.bindv6only
を実行して確認してください。
関連
-
ホスト:github.com を解決できない 問題 解決方法
-
[解決済み] Dockerでイメージのクリーンビルドを強制する方法
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] 既存のDockerコンテナにポートマッピングを割り当てるにはどうしたらいいですか?
-
[解決済み] Dockerで1つ以上のポートを公開するには?
-
[解決済み] ライブDockerコンテナでポートを公開する
-
解決する :dpkg: linux-image-4.15.0-33-generic (--configure) パッケージの処理にエラーが発生しました。
-
[解決済み】Dockerコンテナからホストポートにアクセスする方法
-
[解決済み] etc/nginxを復元するにはどうしたらいいですか?[クローズド]
-
[解決済み] Ubuntu 14.04 LTS (Trusty Tahr)にia32-libsをインストールする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Docker Networking が無効になっています。警告: IPv4 転送が無効になっています。ネットワーキングは機能しません
-
appstreamcli' でエラー: 二重解放または破損 (fasttop): 0x0000000002122000
-
Ubuntu notepad++ をインストールする
-
フォルダ内の全画像を一括でリネーム(python実装)
-
apt-get install with error: E: Unable to correct problems, you have held broken packages.
-
高性能ウェブサーバーとリバースプロキシサーバーの起動に失敗しました エラー
-
ホスト:github.com を解決できない 問題 解決方法
-
ubuntuでは、virturalboxがエラーで起動します。
-
[解決済み] Ubuntuでのdocker + ufwのベストプラクティスを教えてください。
-
[解決済み] Ubuntu 14.04 LTS (Trusty Tahr)にia32-libsをインストールする方法