現在、Docker コンテナの起動時に静的 IP 172.17.0.1 を割り当てようとしています。
このコンテナの SSH ポートとしてポート 2122 を使用し、このコンテナがポート 2122 をリッスンするようにします。
sudo docker run -i -t -p 2122:2122 ubuntu
このコマンドは、172.17.0.5 のようなランダムな IP を持つ Docker コンテナを実行しますが、コンテナに特定の IP を割り当てる必要があります。
次のシェル スクリプトは、高度なネットワーク設定で Docker ドキュメントを参照したものです。
pid=$(sudo docker inspect -f '{{.State.Pid}}' <container_name> 2>/dev/null)
sudo rm -rf /var/run/netns/*
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
sudo ip link add A type veth peer name B
sudo brctl addif docker0 A
sudo ip link set A up
sudo ip link set B netns $pid
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link delete eth0
sudo ip netns exec $pid ip link set dev B name eth0
sudo ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link set eth0 up
sudo ip netns exec $pid ip addr add 172.17.0.1/16 dev eth0
sudo ip netns exec $pid ip route add default via 172.17.42.1
このシェル スクリプトは、静的 IP 172.17.0.1 を割り当て、世界に正常にリンクします。しかし、ローカルからこのコンテナーに SSH 接続しようとすると、機能しませんでした。どのような問題が発生したのでしょうか?
ベストアンサー1
Docker バージョン 1.10.1、ビルド 9e83765 を使用すると簡単になります。
まず、独自のDockerネットワーク(mynet123)を作成する必要があります。
docker network create --subnet=172.18.0.0/16 mynet123
次に、イメージを実行するだけです(Ubuntuを例に説明します)
docker run --net mynet123 --ip 172.18.0.22 -it ubuntu bash
次にUbuntuシェルで
ip addr
さらに、
--hostname
ホスト名を指定する--add-host
/etc/hostsにエントリを追加する
ドキュメント(およびネットワークを作成する必要がある理由)https://docs.docker.com/engine/reference/commandline/network_create/