ホストと異なる専用 IP アドレスで Docker コンテナを起動する
以前に Ubuntu で NIC に復数の固定アドレスを割り当てる というメモを書きました。 このメモも参考に「ホスト OS が使う IP アドレスとコンテナが利用する IP アドレスを分ける」という方針での設定例をメモしておきます。 ホスト OS は「ひとつしか NIC が無い」前提とし、サンプルとして GitLab を Docker コンテナとして起動します。
検証環境¶
対象 | バージョン |
---|---|
Ubuntu | 24.04.4LTS |
ホスト OS の NIC にはふたつの IP アドレスを割り当て、以下の方針で利用します。
IP アドレス | 用途 |
---|---|
10.0.0.1/24 |
ホスト OS で利用する |
10.0.0.99/24 |
Docker コンテナで利用する |
sshd で Listen するアドレスを指定する¶
sshd はデフォルトで全てのアドレス (0.0.0.0
) を Listen します。 これでは NIC に追加 IP アドレスを割り当てても sshd が Listen し、他のコンテナと衝突する可能性がある為、sshd が Listen する IP アドレスを限定します。 /etc/ssh/sshd_config
を以下のように修正します。 修正が完了したら systemctl restart sshd
を実行して反映します。 設定反映が完了したら以下のコマンドなどで「sshd が 0.0.0.0
を Listen していないこと」を確認します。
systemctl status sshd
sshd -T | grep -e addressfamily -e listenaddress
lsof -i:22
ss -nt
修正前¶
1 2 3 |
|
修正前¶
1 2 3 |
|
ホスト OS の NIC に復数 IP アドレスを割り当てる¶
Ubuntu で NIC に復数の固定アドレスを割り当てる を参考に、ホスト OS に復数 IP アドレスを割り当てます。 /etc/netplan
ディレクトリ配下にある netplan の設定ファイルを以下のように設定します。
1 2 3 4 5 6 |
|
ホスト OS とは別アドレスで GitLab コンテナを起動する¶
概ね、以前に書いた Docker Compose で GitLab を起動する というメモの手順で GitLab を Docker コンテナとして起動します。 作業用のディレクトリを作成します。
1 2 |
|
以下の内容で docker-compose.yml
ファイルを新規作成します。 ports
の定義には変換する「Docker コンテナで利用する IP アドレス」も合わせて指定します。 また、通常では TCP/22 や TCP/80 がホスト OS と衝突しがちである為、「2022 ←→ 22」や「8080 ←→ 80」といったポート変換をしますが、今回は「Docker コンテナ専用 IP アドレス」を用意する為、「22 ←→ 22」「80 ←→ 80」のようにポート変換せずに利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
ブラウザで http://10.0.0.99
(8080 などのポート指定はしない) へアクセスし、GitLab のログイン画面が表示されれば成功です。