search
LoginSignup
25
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

/sbin/init (upstart) in docker + ssh

チラシの裏的に

やりたかったこと

systemdについて興味が出て調べているとき、Fedora20の/sbin/init (すなわちsystemd) をdockerで動かそう、なんていうヨコシマなことを考えて、でも動かないようでした。

このあたりはdockerで主に期待される使い方からかけ離れているのと、下位層にまつわるもろもろがあるようで私がなんとかできるレベルを超えているような気がしたので今回はギブアップしてます。やった人がいたら超期待です。

なおsysvinit, upstart, systemdあたりの私のメモはこちらにあります: https://mowa-net.jp/wiki/init

せめてUpstartなホストでsshだけ動かしてみよう

TwitterにてUpstartでなら/sbin/initを走らせる記事があるよ、という話がありました。

ということで Ubuntu 12.04 LTS をdocker 0.11.0 で動かしてみました。

ただ、参考にしたその記事ですが、このままだとどうも動きません。

脇道: docker記事を漁る時の注意

dockerはここ半年の範囲ですらバージョンがボンボン上がって昔の実装と今の実装でやっていることが違うようです。

かつて/sbin/initが書き換わっていた時期というのもあるようなんですが、現在0.11.0では書き換わらなようです。「upstart動かないちゃん」的な記事の英語のフォーラム含めて結構時代遅れだったりして、ちょっと調べるのがハードです。

/sbin/init を直接書き換えていたところは /.dockerinit というルート配下の別の実行ファイルを用意することで動作を変えた、みたいですが……よくわからない

一応現時点 (2014-05-09 + Debian wheezy 7.5 + docker 0.11.0 + lxc) でUpstart + ssh動かした方法だけ書きますが、正しい保障はありません。

Dockerfile

FROM ubuntu:12.04
MAINTAINER amedama

RUN apt-get -q update
RUN apt-get install -y apt-utils openssh-server sudo vim

RUN update-rc.d ssh defaults

RUN useradd --create-home -s /bin/bash ubuntu ; \
  adduser ubuntu sudo ; \
  echo "ubuntu:ubuntu" | chpasswd;

# Expose the container's port 22
EXPOSE 22

# Execute /sbin/init directly (without shell)
CMD ["/sbin/init","3"]
  • 日本語ロケールとか邪魔ですし元の記事のはSJIS周りでエラー吐いてますので消しました
  • lxc.confは多分要りません
  • 代わりにruntime 3としてみましたが必須か知りません
  • apt-get upgradeはよくないと、ちあのんが言ってた気がしますので消します
  • MAINTAINERをつけときました

で、ビルド

> docker version
Client version: 0.11.0
Client API version: 1.11
Go version (client): go1.2.1
Git commit (client): 15209c3
Server version: 0.11.0
Server API version: 1.11
Git commit (server): 15209c3
Go version (server): go1.2.1
Last stable version: 0.11.1, please update docker
> echo-sd うるせーこれ書いたらアップデートするから黙れ
_人人人人人人人人人人人人人人人人人人人人人人人人_
> うるせーこれ書いたらアップデートするから黙れ <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
> docker build -t dmiyakawa:inittest . 
...

走らせる…… --privileged をつけて

> docker run --privileged -t -i dmiyakawa:inittest

IPアドレスを調べる

同じマシンの別のターミナルで (他のcontainerがない前提で)

> docker inspect `docker ps -q` | grep IPAddress
    "IPAddress": "172.17.0.2",

ssh

> ssh ubuntu@172.17.0.2
ubuntu@172.17.0.2's password: 
Welcome to Ubuntu 12.04.4 LTS (GNU/Linux 3.2.0-4-amd64 x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Fri May  9 06:20:47 2014 from 172.17.42.1
ubuntu@5e8833be75cf:~$

(個人的諸事情で手元では-o PubkeyAuthentication=noをsshにつけてます)

次の課題

systemdをこれで動かせればsystemctlを調べる記事が書けるのに……

ただ、スムーズに動くんですかね。しょうじき下回りが絡みすぎててもう少しガチな人に解説願いたい感。

ま、やるなら多分 virtual box か kvm か何かでやります

注意

上のDockerfileを14.04ベースでやるとブートで止まります。原因不明。

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
What you can do with signing up
25
Help us understand the problem. What are the problem?