Help us understand the problem. What is going on with this article?

DockerでCentOS7のコンテナを使用する手順を、初めから丁寧に(Mac版)

More than 1 year has passed since last update.

前提

  • MacでのDockerは、boot2dockerを使用しますよね。なのでインストール済みであること。
  • docker pull centos:7で、既にCentOS7のイメージをインストール済みであること。

問題点

  • centos7のコンテナを、今まで(Centos6系など)と同様に、以下のように起動します。
> docker run -i -t -d -p 8888:80 -p 10022:22 --name="container_name" centos:7 /bin/sh
  • すると、以下のようなエラーが吐かれてしまいますた。。。
Failed to get D-Bus connection: No connection to service manager.

原因

  • CentOS 7ではinitデーモンがsystemdに変更されたため。

解決策

  • nsenter を使って、CentOS7のコンテナを起動すると、うまくいきますよー。ってことで、手順は、以下の通りです。

nsenterのインストールから、コンテナ起動まで。

  • 分かりやすさのため、コマンドプロンプトのマークの意味は、以下のようにします。

    • > : OS X 内
    • $ : boot2docker VM内
    • % : Dockerコンテナ内

1. boot2dockerのパスを調べておく

> which boot2docker
/usr/local/bin/boot2docker

2. boot2docker VMに、sshログイン

> boot2docker ssh

3. nsenterをインストール

$ docker run --rm -v /usr/local/bin/boot2docker:/target jpetazzo/nsenter

4. boot2docker VM内のPATHに、/usr/local/bin/boot2dockerを追加する。

$ echo 'export PATH=/usr/local/bin/boot2docker:$PATH' >> ~/.profile
$ source ~/.profile
  • OS X 内の.profileではなく、boot2docker VM内.profileですよー。気をつけて!!

5. nsenterのパスが通ったか?を確認

$ which nsenter
/usr/local/bin/boot2docker/nsenter

6. centos7のコンテナを起動

  • 「boot2docker ssh」でログイン状態にあることが前提

  • ポイント

・特権モードにする(--privileged)
・コンテナで起動されるコマンドは/sbin/initにする
$ sudo docker run --dns 8.8.8.8 --privileged -d -p 8888:80 -p 10022:22 --name="container_name" centos:7 /sbin/init
  • sudoを付けてコンテナを起動してね。でないと、後でPermission Errorというエラーが吐かれちゃうよー。気を付けて!!

7. nsenterを使用してコンテナに入る。

  • 良い子は、ここでも、ちゃんと sudoを付けようね。
$ sudo nsenter -t $(sudo docker inspect --format '{{.State.Pid}}' container_name) -m -u -i -n -p /bin/sh
  • これでsystemctlが使えます。
% systemctl get-default
multi-user.target

最後に

  • うまくいきましたか? よかったら、ぜひ参考にしてください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away