valencia日誌

valenciaの事は少しだけ話すかも

Docker の init 起動がうまくいかない

ビルドした後のイメーで run しても init がうまく動いてくれないことがある。

だいたいその場合は

# DOCKER VERSION 0.9.0
docker stop CONTAINER ID(or NAMES)
docker start CONTAINER ID(or NAMES)

をしてあげると動いてくれる。

running systemd inside docker arch container hangs or segfaults #3629

コレがそれっぽいな。

ADD foo /bar/

ADD の書き方を間違えて気がついた。

#Docker-VERSION 0.9.0

ADD foo /bar

こんな感じで間違えてましたが、エラーで終了せずにあたかもまだ動いているのな状態で止まりました。

ビルド中でも docker ps で何が動いているのか確認できるので見てみたのですが、何もありませんでした。

docker ps -a でみると STATUS が Exit のしかなくビルドが止まっていることに気が付きました。

0.9.0以前はこのミスはエラーになったはずではっと。

うーん。なんだろう。

boot2docker で ssh 出来なかった

Received disconnect from 127.0.0.1: 2: Too many authentication failures for docker

このように言われちゃいました。

調べてみたらどうも $HOME/.ssh に id_rsa があると上手くいかないみたいでした。

もう、この id_rsa は使っていないのでリネームして boot2docker ssh をしたら問題なく入れました。

0.9.0 を試したかった。

Docker が0.9.0を出したので試しそうと思い手元のboot2docker のバージョン上げましたがこっちはまだ0.8.1だったので無理やり0.9.0にしてみた。

Binaries

上記を参考にバイナリを更新してみたらうまくいきました。

※細かくチェックしているわけではないので本当にうまくいってるかは不明です。

手順は

wget https://get.docker.io/builds/Linux/x86_64/docker-latest -O docker
chmod +x docker
chown root:root docker
killall docker
mv docker /usr/local/bin/docker
/usr/local/bin/docker -d -D -g /mnt/sda1/var/lib/docker -H unix:// -H tcp://0.0.0.0:4243
docker version

こんな感じです。

ただ、自分で作った Dockerfile が lxc ドライバに依存していたので

/usr/local/bin/docker -d -e lxc -D -g /mnt/sda1/var/lib/docker -H unix:// -H tcp://0.0.0.0:4243

で docker を再起動しないとダメでした。

次は依存しないようにしないと。

追記(2014-03-16)

boot2docker の最新バージョンで 0.9.0 が入ってます。

github boot2docker

Dockerで複数のプロセスを起動する

/sbin/init を使ってあげれば良さそう。

追加で起動したい物があれば、/etc/init に足してあげる。

ADD foo.conf /etc/init/foo.conf

conf の中は例だけど

start on runlevel [12345]
respawn
exec /usr/local/bin/foo

こんな感じで。

他にも、supervisor を使うのもいいと思う。

Using Supervisor with Docker

公式にもあるしね。

 

元々、複数動かそうとして

CMD ["/usr/sbin/sshd", "-D"]
CMD ["script/startup.sh"]

RUN /usr/sbin/sshd -D
RUN sh ./script/startup.sh

といったことが出来なかったのでちょっと調べてみた。