LoginSignup
22
23

More than 5 years have passed since last update.

コンテナに固定IPを割り振って外部からアクセスする

Last updated at Posted at 2015-01-07

dockerのネットワークはそのままでは固定IPを使う事が出来ない。
それじゃ我慢ならないからコンテナに固定IPを割り振って
外部からアクセスするまでをまとめている。
ホストがCentOS7のお話。

現在のイメージ

当たっているか自信ないけどdockerをインストールした後の
ネットワークをイメージ化するとこんな感じになっているんじゃないかと思う。

nw2.png

完成予想図

仮想ブリッジを立てて、その配下にコンテナがぶら下がるイメージ。
元々あった物理NICのeno1は自分以外のフレームも全て取り込む、
とにかく届いたフレームを全て仮想ブリッジであるbr0に送り届けるだけの人になってもらう。
(完成イメージ)
nw.png

仮想ブリッジ作成

仮想ブリッジbr0を作成します。

nmcli con add type bridge ifname br0            # 仮想ブリッジbr0を作成する
nmcli con modify bridge-br0 bridge.stp no       # STPはじゃべるな
nmcli con modify bridge-br0 ipv4.method manual ipv4.address "192.168.1.0/24 192.168.1.1" ipv4.dns 192.168.1.254             # IPの設定

物理NICの接続

仮想ブリッジbr0に物理NICのeno1を接続する。
以下をやれば接続されるらしい。俺の環境では接続されなかったぽいけど。

nmcli con add type bridge-slave ifname eno1 master bridge-br0

eno1の設定は消させてもらう。
何しろ受信したフレームを何も考えずにbr0に届けさえすれば良いんだから。

nmcli con modify eno1 ipv4.dns "" ipv4.addresses "" ipv4.method disable

NetworkManagerを再起動して設定反映する。
本当なら以下で反映されるっぽい。俺の環境では反映されなかったけど。
マシン自体を再起動したら仮想ブリッジの設定は反映された。

systemctl restart NetworkManager

仮想ブリッジbr0に物理NICのeno1を接続する。
マシンを再起動してもeno1とbr0は接続されなかったみたいだからbrctlで接続を試みる。

yum install bridge-utils
brctl addif br0 eno1
brctl show

コンテナのNICと仮想ブリッジを接続

pipeworkってのがあるらしいよ。何やってるかはココが解かりやすかったです。

pipeworkの導入

cd /usr/local/src
git clone https://github.com/jpetazzo/pipework.git
ln -sv /usr/local/src/pipework/pipework /usr/local/bin/

コンテナにeth1を追加してbr0に接続させる。

pipework br0 コンテナID 192.168.1.2/24

コンテナ側の設定

固定IPは割り振られた。だけどもまだ外から接続出来ないと思う。
コンテナに入ってちょいちょいと設定を行う。

nsenter -t $(sudo docker inspect --format '{{.State.Pid}}' コンテナ名) -m -u -i -n -p /bin/sh  # 起動しているコンテナに入る

ifdown eth0   # docker0との関係は断ち切ってしまおう。
route add default gw 192.168.1.254 # デフォルトゲートウェイの設定。ホストと同じで。

あとはコンテナでsshdとか起動すれば外部から192.168.1.2にsshでアクセスできるはず。

22
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
23