dockerコンテナのIP確認
docker inspect <コンテナID> | grep IPAddress
docker containerにアクセスできないとき
以下を参考にして確認
https://web.plus-idea.net/on/docker-web-server-access-denied/
docker hostネットワークの罠
hostネットワークを利用する際は「EXPOSE」でポートを開けときましょう
hostモードのネットワークを利用する場合、コンテナーは独自の IP アドレスを持たないため、ポートマッピング は機能しません。
したがって-p、--publish、-P、--publish-allの各オプションは無視され、警告メッセージが表示されます。
ubuntuでのIP確認方法
ip addr show #IPv4とIPv6アドレスを表示
ip a #ip addr showと同じ
hostname -I #IPv4アドレスを表示
curl ifconfig.me #サーバと通信する時に使われるパブリックIPアドレスを表示
dockerの内部IPを調べる方法
docker create network でサブネット管理
※どのサブネットに属するかを設定し忘れると後々とんでもないことになる
https://qiita.com/MetricFire/items/b731c84975bd9894748d
dockerのコンテナ間通信の方法
- リンクを作成(レガシー)
以下の理由があってレガシーなのかな。。。
※portを自動設定してくれるので楽なんだけど、複数のコンテナがある場合portの管理がめんどくさい。
※ハッカーが大好きなポートスキャンをされる可能性を考慮し、portの管理はしっかり行えるようにする
- dockerネットワーク作成(これがメインかな)
docker networkは難しい!少し触らなかったらすぐに忘れちゃうのでこちらの記事で思い出す。
3つくらい記事を読んだらだいたいok
https://qiita.com/TsutomuNakamura/items/ed046ee21caca4a2ffd9
https://sagantaf.hatenablog.com/entry/2019/12/18/234553
https://genchan.net/it/virtualization/docker/10601/
https://qiita.com/suo-takefumi/items/bb42f6bd17707de354b9
とにかく「疎通確認」をしてからコンテナ内部の実装に入る
個人的に最適なコンテナ構築フロー
- 中身のないdocker container作成(ubuntuだけ立ち上げる)
- 手書きでネットワーク図を書く。ポートフォアディングとかの設計を行う
ネットワーク系わからなくなったら以下を参考にする。頭の整理をする
- dockerfileのexposeやdocker runのポート確認を行う
- pingやtelnetで疎通ができるか確認
- 以下の対処(疎通できてないよ。これはIPがおかしいよ)
[Errno99] Cannot assign requested address
- 以下の対処
エラー内容メモしてたのに忘れてしまった!!!!
IPは通ってるがportが空いてないよ、のエラー
- 疎通確認できしだい、ごりごりDockerfileを作っていく
訳わからないエラーに頭を抱えないように「privileged」設定をする。最後に「privileged」をなくして実装
docker run --privileged ~~~~~
dockerfileを最適化しすぎてコンテナに入った時に後悔しがちなモジュール
- pingがない。netstatがない。等(netstatの引数は -nap : netstat -nap)
apt-get install iputils-ping net-tools
- telnetがない
apt-get update
apt-get install telnet
- lsofがない
apt-get install lsof
他にもあればupdate
ubuntuのバージョン確認
lsb_release コマンドを使って Ubuntu のバージョンを確認する
etc/issue ファイルを使って Ubuntu のバージョンを確認する
etc/os-release ファイルを使って Ubuntu のバージョンを確認する
hostnamectl コマンドを使って Ubuntu のバージョンを確認する
hostname -I :hostIPの探索
ubuntuのコンテナ内では[systemctl]とか基本的に使えねーよ!!!
※使う方法はあるが、めんどくさいので使えないと思っておいた方が良い
※代わりに[service]とかを使う
https://genchan.net/it/virtualization/docker/13093/
pythonがメインの人は仮想環境管理を忘れずに!!!最後にpip freezeでrequirementをdockerfileで呼べるように!!!
pythonの訳わからないpipのエラーは以下! setuptoolが古いはぼけ!
なぜかコンテナのポートが開かないとき
firewallの設定を変えてみましょう
https://qiita.com/htshozawa/items/e24729a4ab332cb40313
ポートが空いているかはこちらで確認
sudo netstat -tulpn
OSの諸設定
-
timezoneの設定
dockerfileに以下を入れときましょう
ENV TZ Asia/Tokyo
https://qiita.com/zaki-lknr/items/cd9844fa6a1efa58cab1
https://qiita.com/apollo_program/items/2495a109ce7afec21f25
コンテナ疎通を確認していくとわからなくなってくる「127.0.0.1とlocalhostと0.0.0.0の違い」
以下の記事で頭を整理
https://qiita.com/1ain2/items/194a9372798eaef6c5ab
dockerを考える上で「eth0」「docker0」とかを理解しているのは当たりまえ!
eth0 : ネットワークインターフェースのひとつ。ホストにIPが降られるのではなく、NICにIPが割り振られている。ここを勘違いしている人多いのではないか...?
docker0 :仮想ブリッジのこと。eth0をつなげてる
仮想ブリッジについてはここを一読したら大体ok
https://gihyo.jp/admin/serial/01/ibm_kvm/0003
- containerとかimageとかがたくさんキャッシュされてめんどくさくなった時
docker system prune --all