docker network connectコマンドの使い方(実例付)CE対応


 docker network connectコマンドの使い方の紹介ページです。Docker CE ver17.12.1に対応しております。

 このコマンドは、コンテナをDockerネットワークに接続する際に使用します。

 コンテナをDockerネットワークに接続する方法は、接続するネットワークをコンテナ起動時に指定する方法と、本記事のコマンドdocker network connectを使用する方法の2つあります。

 コンテナ起動時に指定する方法では、1つのネットワークしか指定できませんが、docker network connectを使用することで、コンテナを複数のネットワークに接続させることが可能になります。

 dockerネットワークに関しましては、別記事「Dockerネットワークの概要とその作り方の解説」をご参照ください。

 それでは、以下で詳細に解説いたします。

 

docker network connectコマンドのフォーマットとオプション

フォーマット

docker network connect [オプション] ネットワーク コンテナ

 

主なオプション一覧

--alias=[] 
対象のネットワーク内で使用可能なコンテナ用のエイリアスを追加する

--ip
接続するコンテナのIPアドレス(v4)を指定する

--ip6
接続するコンテナのIPアドレス(v6)を指定する

■ 本記事の目次に戻る ■

docker network connectコマンドの主な使い方

 

コンテナを指定したDockerネットワークに接続する

 まず、テスト用のコンテナvmtestを作成して起動します。

$ docker run -d --name vmtest centos init

 docker inspectコマンドにて「Networks」の設定内容を確認してみましょう。

$ docker inspect vmtest

 「Networks」の部分は以下のようになっています。

(省略)
 "Networks": {
        "bridge": {
 (省略)

 これは、vmtestはbridgeという名前のネットワークに接続していることを表しています。Dockerコンテナ起動時にネットワークを指定しなかった場合は、デフォルトでbridgeネットワークに接続されます。

 docker runコマンドにてネットワークの指定なしにコンテナを起動しましたので、仕様どおりの動きですね。

 ここで、Dockerネットワークtestnet1を作成します。

$ docker network create -d bridge testnet1

 このネットワークにさきほど起動したコンテナvmtestをdocker network connectコマンドで接続します。

$ docker network connect testnet1 vmtest

 再度docker inspectコマンドにて、コンテナvmtestの「Networks」の設定内容を確認してみましょう。

$ docker inspect vmtest

 「Networks」の部分は以下のようになりました。

(省略)
 "Networks": {
        "bridge": {
 (省略)
 },
        "testnet1": {
 (省略)

 先ほどはネットワークbridgeしか表示されてなかったのですが、今回はネットワークtestnet1が追加されています。

 docker network connectコマンドでコンテナvmtestがネットワークtestnet1に接続されたことが確認できました。

 

ネットワークに接続する際にコンテナのIPアドレスを指定する

 まず、前項で作成したネットワークtestnet1に接続したコンテナvmtestのIPアドレスを確認します。

 docker inspectコマンドでvmtestの情報を確認してみましょう。

$ docker inspect vmtest

 「Networks」の「IPAddress」部分のみ確認します。

"Networks": {
       "bridge": {
 (省略)
             "IPAddress": "172.17.0.2",
 (省略)
       "testnet1": {
 (省略)
             "IPAddress": "172.18.0.2",
 (省略)

 ネットワークbridgeでは「172.17.0.2」、ネットワークtestnet1では「172.18.0.2」であることがわかりました。

 Dockerネットワークでは、ネットワーク毎に使用可能なアドレス帯やコンテナのIPアドレスが自動的に割り当てられます。これはDHCP機能ではなく、Docker独自の仕組みです。

 基本的に、IPアドレスに関しましてはDockerに任せておけば重複などの心配は無いのですが、場合によっては自分で指定したい場合もあると思います。

 例えば、WebサーバとDBサーバで構成されたシステムで、お互いのIPアドレスを設定しなければいけないような場合です。

 Dockerネットワークで、自分でIPアドレスを決めたい場合は、まずネットワークを作成する際に、そのネットワークのサブネットを自分で指定して作成する必要があります。

 以下のコマンドで新しいネットワークtestnet2を作成します。作成する際にtestnet2のサブネットは「172.20.0.0/24」を指定することにします。

$ docker network create --subnet 172.20.0.0/24 testnet2

 このネットワークtestnet2にコンテナvmtestを接続してみます。IPアドレスは「172.20.0.77」を指定します。

$ docker network connect --ip 172.20.0.77 testnet2 vmtest

 docker inspectコマンドでvmtestの情報を確認してみましょう。

$ docker inspect vmtest

 「Networks」の「IPAddress」部分のみ確認します。

"Networks": {
      "bridge": {
 (省略)
            "IPAddress": "172.17.0.2",
 (省略)
      "testnet1": {
 (省略)
            "IPAddress": "172.18.0.2",
 (省略)
      "testnet2": {
 (省略)
            "IPAddress": "172.20.0.77",
 (省略)
 }
 (省略)

 ネットワークtestnet2上では、コンテナvmtestのIPアドレスは「172.20.0.77」に設定されていることが確認できました。

 IPv6を使用する場合は、「--ip6」オプションを使用します。

 

ネットワークに接続する際にコンテナのエイリアス名(別名)を指定する

 コンテナをDockerネットワークに接続する際に、コンテナにエイリアス名を設定することができます。

 エイリアスのテストを行うためにコンテナvmtest2を起動します。

$ docker run -d --name vmtest2 centos init

 このコンテナを前項で作成したネットワークtestnet2に接続してみましょう。接続する際に、betsumeiというエイリアス名を設定します。

$ docker network connect --alias betsumei testnet2 vmtest2

 前項で使用したコンテナvmtestからbetsumeiに対してpingを飛ばしてみます。

$ docker exec -it vmtest ping betsumei
 PING betsumei (172.20.0.2) 56(84) bytes of data.
 64 bytes from vmtest2.testnet2 (172.20.0.2): icmp_seq=1 ttl=64 time=0.065 ms
 64 bytes from vmtest2.testnet2 (172.20.0.2): icmp_seq=2 ttl=64 time=0.055 ms
 ^C
 --- betsumei ping statistics ---
 2 packets transmitted, 2 received, 0% packet loss, time 1028ms
 rtt min/avg/max/mdev = 0.055/0.060/0.065/0.005 ms

 vmtest2のエイリアス名betsumeiからpingの応答がありました。

 念のためvmtest2に対してもpingを飛ばしてみます。

$ docker exec -it vmtest ping vmtest2
 PING vmtest2 (172.20.0.2) 56(84) bytes of data.
 64 bytes from vmtest2.testnet2 (172.20.0.2): icmp_seq=1 ttl=64 time=0.046 ms
 64 bytes from vmtest2.testnet2 (172.20.0.2): icmp_seq=2 ttl=64 time=0.054 ms
 ^C
 --- vmtest2 ping statistics ---
 2 packets transmitted, 2 received, 0% packet loss, time 1021ms
 rtt min/avg/max/mdev = 0.046/0.050/0.054/0.004 ms

 vmtest2からもpingの応答がありました。vmtest2とbetsumeiのIPアドレスも同じですね。

 

 以上でdocker network connectコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(ver1.12対応版)(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください