LoginSignup
3
0

More than 1 year has passed since last update.

dockerでyumやsystemctlがつかえない

Last updated at Posted at 2022-04-21

概要

dockerにcentosを入れてその上でApache,php,pythonを動かすときに色々と困ったので自分メモとしてQiitaに残しておきます。

初投稿なので色々と日本語がおかしかったりうまく書けていなかったりするところがあると思いますがご了承ください。

はまったこと一覧

  • dockerのコマンドがいまいち分かっていない
  • パッケージを入れようとしたらyumが使えない
  • yum問題解決後httpdを立ち上げようとしたらsystemctlコマンドが使えない

dockerのコマンドがわからない

これは私の勉強不足です。
今後も使っていくと思うのでメモがわりに残しておきます。

docker pull centos

まずはマシンイメージをダウンロードしてきます。

docker run -it -p 9999:80 --name xxxxx centos /bin/bash

コンテナの作成、起動をします。
今回はApacheを使いたかったためホストOSの9999番ポートに来たものを80番ポートにポートフォワードします。

yumが使えない

コンテナにcentosを入れていざApacheを使おうと思ったらyumコマンド時にエラー発生

Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

直訳するとミラーリストにURLがないよと言われました。
このエラーで検索してみるとさまざまな解決法が出てきました。
ですがどれを試してもエラーは変わらず、ミラーリストにURLを登録するだけだと思っていましたがうまくいきませんでした。
もっと色々試してエラーを治してみたかったのですが今回はやりたいことがあったので別の方法を試しました。

centosのバージョンを指定してインストール

結局解決しなかったので

docker pull centos:centos7

これでcentosのバージョン指定をしてコンテナの作成をしたところcentos7ではyumが使えました。
こちらの方が楽ですね

systemctlコマンドが使えない

yumが使えるようになりhttpdを入れていざWEBサーバ化と思ったらsystemctlがつかえないという事案が発生しました。
どうやらsystemdはcentos7のデフォルトでは有効化されていないということらしいです。
有効化するには管理者権限がいるためコンテナ起動時に --privileged というオプションが必要です。
さらにそれだけではエラーは治りません

Failed to get D-Bus connection: Operation not permitted

そこで最初に /sbin/init を実行してあげることでsystemctlが使えるようになります。
完成形

docker run -it --privileged -p 9999:80 --name **** centos:centos7 /sbin/init

これでApacheも入り、systemctlで立ち上げることができました。
とりあえずはこれで準備は終わりました。

まとめ

ただphpとpythonをすこし動かしたいだけだったので簡単なことだと思ったのですが意外苦労したのでここにまとめておきます。
拙い文章で申し訳ないのですが、意外と皆さんつまるところではないのかなと思います。
こんな投稿で救われる人がいるなら共有しておこうと思い記事にしました。
間違っている部分や日本語がおかしいところ、この書き方が読みにくいなどがあればコメントしていただけると助かります。

参考記事

3
0
0

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
  3. You can use dark theme
What you can do with signing up
3
0