メニューを閉じる

テクノデジタルグループ

メニューを開く

2018.02.05

開発環境・ツール

DockerでCentOS7起動時にsystemctlが動かないとき

Mです。

どこかで「世界ではubuntuが人気で日本ではCentOSが人気」と見たのですが、
今Google Trendsを見ると日本でもubuntuが人気ですね。(といっても検索数が多いことしかわからないですが)
今度ubuntuの勉強をしておきます。

今回は少し前にやったことなのですが、
Windows10 DockerToolbox環境でCentOS7のコンテナを立ててサービスを起動しようとしたときの話です。

$ docker pull centos:latest
$ docker run -it --name docker_test centos /bin/bash
# yum install -y httpd
# systemctl start httpd
Failed to get D-Bus connection: Operation not permitted

普通に適当(雑の方の意味)に起動するだけだと動かないのです。
対策として下記の3つを使用することで、systemctlが使用できるようになります。
・—privilegedを使用する。
・/sbin/initで起動する。
・上記に合わせ、-itではなく-dで起動し、起動後にexecする。

$ docker run -d --privileged --name docker_test centos /sbin/init
$ docker exec -it docker_test /bin/bash
# yum install -y httpd
# systemctl start httpd
# systemctl status httpd

無事にapacheの起動ができました。
コンテナ作成時に-p 80:80のようにdockerのポートフォワード設定をしておけば、
ブラウザなどから実際にアクセスすることが可能です。

おまけ

共有フォルダの作り方です。あると便利です。
-v <共有したいフォルダパス>:<共有するコンテナのフォルダパス><:roか:rwかなし>
を追加します。
roを付けるとread onlyとなり、書き込みができません。
rwを付けるとread writeとなり、書き込みもできます。
何も付けないとread writeとなるようです。
用途に合わせて使い分けましょう。

まとめ

最終的に今回の記事のものを全て実装すると

$ docker run -d --privileged --name container_name -p 80:80 -v ~/share_folder:/var/share_folder:rw centos /sbin/init
$ docker exec -it container_name /bin/bash

上記の起動方法を使用すると
・systemctlが使用できる
・80へつなぐとポートフォワードされてコンテナへと繋がる
・~/share_folderに共有フォルダがある
というコンテナが作成できるので、簡単な試行錯誤ができる環境ができます。


【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事