Gentoo(systemd)にDockerを入れた件についてふんわりとした感じのアレ
docker on gentoo with systemd (& systemd-networked)の環境が出来上がったので、適当にエントリ書いておきたい
— Windows (@neotaso_) 2016年9月12日
なんか半年近く記事書いてませんでしたね。 ま、ええわ。
環境
- Gentoo Linux (on VMware ESXi6)
- kernel 4.7.3 (2016/9/12現在 ~amd64)
- systemd
- systemd-networkd
- Docker 1.12.1 (2016/9/12現在 ~amd64)
な感じ
なんか太字になっている部分がやらかしたんだなぁとわかっていただければ幸いです
どうせこのエントリの情報も古くなるし、エントリ書こうと思ってやろうとしたわけじゃないので内容はふんわりとした感じです。
メモとか備忘録というかそんな感じのアレです。
なんか聞きたければTwitterで聞いていただければ。
いきさつ
- なんかDockerってアツいやん
- いつのまにかPortageのオフィシャルでStableがいた
- せっかくだし入れてみようか
- どうせだし、最新版で
導入
Docker - Gentoo Wiki
正直このWikiの通りに入れれば大体どうにかなる(ならなかった)
package.keywordsに~amd64の項目入れて、--autounmask-writeしながらemergeするだけ。簡単でしょ
カーネルコンフィグ
案の定も何もWikiの内容は古い(unstable使ってるから当たり前)
大体カーネルコンフィグはWikiにある通りに入れればいいが、一部なかったりするものが有る。
インデント残念で正直見にくくない?
Character devices --->
-*- Enable TTY
-*- Unix98 PTY support
[*] Support multiple instances of devpts
(インデント潰されました。ごめんなさい。これどうすればいいんだろう・・・)
Unix98 PTYやmultiple instance of devptsのコンフィグ入れろって書いてあるし、emerge中に警告も出るが、これはkernel4.6以降では存在しない(ってどっかに書いてあった)
なんかEnable TTYのところにマージされたみたいなので、無視してOK
emergeのWARNは無視しちゃってどうぞ
基本的にはsystemctl start dockerしてあげて、journalctl -xeを見ながら警告やエラー吐いたのを入れてあげればOK(完全に対処療法)
ネットワーク
さて、多分ここまでできればdocker run くらいは動かせる。が、コンテナからpingが外部に通らない。 マスカレードできていないぞ、と。
sysctl.confを見なおしたり、カーネルのコンフィグやiptablesを見なおしたりするが、おかしな所はない。
これはsystemd-networkdのせいであると発覚した。
neotaso@miku ~ $ cat /etc/systemd/network/docker0.network [Match] Name=docker0 [Network] IPForward=kernel IPMasquerade=yes
systemd-networkdは設定を見てsysyctlを制御しているらしく、設定が無いと、フォワーディングやマスカレードをオフにしてしまう。
IPFoward=kernelとなっているのは、sysctl.confに準拠する主の設定になる。
おわり
なんかDocker動いたし、これでイケイケな感じに優勝できそう