networkが作成できない?

問題文

問題文は以下の通りでした。

docker-composeを使って,NetBoxを運用していました. 運用サーバに新しくインターフェースを追加したところ,NetBoxがうまく起動できなくなりました. 原因を調査して,修復してください.

ネットワーク図

初期状態とゴール

初期状態

docker-composeが起動できない

終了状態

app0でdocker-composeを使い,アプリケーションが起動できる

解説

踏み台サーバから開発環境(172.16.0.2)にsshを行います.
まず,docker-composeが起動できない原因を調査します.

sudo docker-compose up
Creating network "netboxdocker_default" with the default driver
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

dockerが新しくネットワークを作ることができないために,起動できていなことがわかります.
ネットワークの状態を確認してみます.

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000        
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:30:b2:ed brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.2/12 brd 172.31.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe30:b2ed/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:30:72:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/12 brd 192.175.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe30:727d/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default    
    link/ether 02:42:fd:82:d0:b5 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

docker0とeth0のPrefixが被っていることが確認できます.
以下のコマンドでdocker0を停止して,削除します.

sudo systemctl stop docker 
sudo ip link set dev docker0 down 
sudo brctl delbr docker0 

次に,/etc/docker/daemon.jsonを以下のように変更します.

{
  "default-address-pools" : [
    {
      "base" : "10.0.0.0/8",
      "size" : 24
    }
  ]
}

最後にdockerを起動します.

sudo systemctl start docker

docker0のIPを変更したので,docker networkを新しく作れるはずです.

sudo docker-compose down
sudo docker-compose up -d 

解説は以上です。

採点基準

  1. 発生している問題に関して報告できている(30%)
    • docker0とinterfaceのIPアドレス帯が被っていることに言及されている
  2. 問題への適切な解決方法が報告できている(70%)
    • /etc/docker/daemon.jsonを用いて,docker0のインターフェースのIPアドレスが変更されている
    • docker-compose upでコンテナが起動できる.

講評

お詫び

まず、問題の文章に不備があったことにお詫び申し上げます。失礼しました。

解答について

様々な解答をしていただき,勉強になりました.
想定していなかった解答方法としては,docker-compose.override.yaml にIP Addressを追記する方法やdocker networkを予め作っておいて docker-compose.yaml で使用している解答などがありました.

終わりに

問題を解いていただき,ありがとうございました.