Docker network

ネットワーク種類

ネットワーク 機能 備考
bridge 規定 -p 8080:80
ホストとコンテナを接続
host ホストのIPを共有
内部IPの変換を行わない。
=同じポート番号のコンテナを複数起動できない
--net host
pオプション使用不可
none ネットワークに接続しない --net none

コマンド

コマンド 機能 備考
docker network ls ネットワーク表示
docker network create ネットワーク名 ネットワーク作成
docker network rm ネットワーク名 ネットワーク削除

オプション

オプション 機能 備考
--net コンテナ間通信時のネットワークを指定 docker run -it -p 8080:80
--net=ネットワーク名 〜

docker-compose.yml

前提
本来はdefault_プロジェクト名のnetworkが自動で作成され、全てのcompose内のコンテナはこのnetworkに接続される。

default使用

default_プロジェクト名のnetworkを自動作成せず、以下のnetworkを既定のnetworkとする。
全てのcompose内のコンテナはこのnetworkに接続される。
事前にdocker network create testが必要

services:
 web:
  〜
networks:
 default:
  external:
   name: test

独自network利用

事前にdocker network create testが不要
ネットワーク:docker_testが自動で作成される(←書き方の問題?)
compose上ではtestで利用される

services:
 web:
  〜
  networks:
   - test
networks:
 test:

確認
docker network ls
NETWORK ID NAME DRIVER SCOPE
XXXXXXX docker_test bridge local

docker network inspect docker_test
“Containers”: {
 ”XXXXXXXXXX”: {
  ”Name”: “web”,
  〜
 }
}

recreate

前提:一度defaultのネットワークに接続した後、別のdefaultを作成しても明示的に接続先を指定しない限り接続先は変わらない。

defaultのネットワークを更新
docker-compose up --force-recreate

Docker Inspectによる接続確認

接続されているコンテナのIP一覧
docker inspect --format='{{range $host. $conf := .Containers }}{{$conf.Name}}->{{$conf.IPv4Address}}{{end}}' bridge

インスタンスの IP アドレスを取得
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID

インスタンスの MAC アドレスを取得
docker inspect '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID

インスタンス用ログのパスを取得
docker inspect --format='{{.LogPath}}' $INSTANCE_ID

バインドしているポート一覧を表示
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID

Docker

前の記事

Docker コマンド一覧
Docker

次の記事

Docker Toolbox