質問: ホスト側(centos7)では普通に使える centosコマンド が、 コンテナ内(centos7)で、 下記コマンドなどが使えない。 (例) $ set enforce 0 $ firewall コマンド $ localectl コマンド 他にも沢山ありそうです。 なお、コンテナは下記で生成・起動しました。 $ docker run --privileged -h httpd -d -p 8080:8080 --name コンテナ名 centos:latest /sbin/init コンテナ内で何かインストールする必要があるのでしょうか? どうぞ宜しくお願いします。
回答: Docker版のCentOSは最低限のバージョンなので`firewalld`はインストールされていないようです。 (念のために確認しておきますが、`firewall`コマンドというのは`firewall-cmd`の間違いですよね?) ``` $ yum install firewalld ``` でインストールしてください。 他にどんなパッケージがインストールされているかは、 ``` $ yum list installed ``` で確認できます。 また、`localectl`でエラーになるのは`systemd`が1度も起動していないからだと思います。 1度`systemctl`コマンドを実行すると`localectl`も実行できるようになるはずです。 最後に、根本的な問いなのですが、なぜDockerでCentOSを利用するのでしょうか? 1つのコンテナでは1つのプロセスしか起動せず、HTTPサーバーやDBサーバーなど用途に応じてコンテナを立てて、相互に連携するようにするのが現在のDockerの使い方の主流です。 それなのにCentOSを使って最初に`/sbin/init`を起動するような使い方はあまりDockerに適しているとは言えません。また、`--privileged`オプションも可能ならば付けずに済む方がよいです。 今までCentOSで開発をしてきて、それをそのままDocker上に移植したいのかもしれませんが、ここで一度Dockerを使った開発というものについて考えてみてはいかがでしょうか?