Skip to content

Instantly share code, notes, and snippets.

@miliya612
Created April 7, 2019 06:41
Show Gist options
  • Save miliya612/ac13a1f0e09de78c1ec40516af6e8f8b to your computer and use it in GitHub Desktop.
Save miliya612/ac13a1f0e09de78c1ec40516af6e8f8b to your computer and use it in GitHub Desktop.
containerと外部とのアクセスでだいぶつらかったのでまとめた

motivation

  • appを突っ込んだcontainerからhostのpostgresqlへのアクセスをしたい

絡んできたdocker関連の用語たち

  • docker link
    • すること: 環境変数の共有と/etc/hosts内に値を注入する
    • よきこと: いちいちcontainerのlocal IPを指定しなくても通信できるようにする
    • 決してcomponent間のアクセスを可能にするものではない
    • deprecated(http://docs.docker.jp/engine/userguide/networking/dockernetworks.html)
      • setupが面倒だから
      • 設定間違いがちだから
  • docker network
    • none network(default)
      • 外部通信を行わない
    • host network(default)
      • dockerホストと同一ネットワークにスタックするドライバ
      • 同一ネットワークI/F, IPアドレスを持つ
    • bridge network(default)
      • ホスト上に別ネットワークを構築する
      • Linux Bridge機能を利用
      • Linux bridgeで構成された仮想ネットワーク上にcontainerを構築
      • 仮想ネットワークのI/Fにcontainerがvethで接続
      • containerはNATで外部と通信
      • container作成時のデフォルト挙動
    • overlay network
      • 異なるDocker host(L3 NW)上のcontainerに、同一ホスト上にあるかのように透過的にアクセスできるようになる
      • VXLANを使って実装
      • 異なる拠点間やデータセンター上にあるDockerホストに対しても有効
    • 自分で作るcustom network
      • docker network系のコマンドを使って君だけのcustom networkをつくろう!
      • 公式documentはこれ推し
  • notes
    • docker for macを使っている場合、docker0 I/Fは生成されない
      • hostと通信できない
    • host.docker.internal を指定することで通信可能
    • もちろん他の環境だと解決できないので死ぬ

よむべし

参考

結局どうすべきか

  • 手っ取り早くcontainer to host
    • ホストのローカルIP指定すればいけそうな気がする(要検証)
  • ちゃんとcontainer to host
    • docker container作成時に --nethostを指定
      • デフォルトで存在するdocker networkシリーズ
      • hostと同じnetwork I/Fにアタッチされる
    • localhostでアクセス可能
  • 手っ取り早くcontainer to container
    • 同上のはず
    • どっちもちゃんと --net hostつけて作ってあげる必要がある
    • 何でか分からなかったら上の記事読むとよい
  • ちゃんとcontainer to container
    • docker create network XXX
    • container作成
      • --netオプションで作成したnetworkを指定
      • --nameでcontainer名指定もした方が良い(理由は後述)
    • もう一個も同じ感じで作る
    • 相手先の container nameをドメインに指定してアクセス可能に

他の調べた方が良さそうなこと

所感

  • docker for mac独自の挙動をするのでつらい
  • 遊べるlinux環境は早めに準備しておくとよいと思った
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment