Dockerコンテナ環境でmanコマンドを使えない問題を解決する方法
はじめに
飽きずに毎日Bashやシェルスクリプト関連の記事を書いているわけですが、
記事の内容が本当に正しいのかを確認するためにDockerコンテナ環境内で動作を確認しています。
僕のMac環境は随分汚れてしまっているので、正しい動作を確認するためにはクリーンな環境が必要なわけです。
執筆の合間にBashの正しい挙動はどう定義されているのかを書くにするために man
コマンドを実行したくなることもあるのですが、Dockerコンテナ内で man bash
を実行してもマニュアルが確認できません。
コンテナイメージのサイズが大きくなってしまいますが、事前にインストールしておこうと思いました。
検証環境
いつも執筆の際に利用しているディストリビューションは CentOS です。 ( 未だにCentOS なので、いい加減Ubuntuあたりに移行したい。 )
大体 docker run --rm -it centos:centos7 bash
を実行して、検証環境を立ち上げています。
man
コマンドをインストールしてはみるが...
CentOSのパッケージ管理ツールといえば YUM です。yum
コマンドで man
をインストールします。
正しくインストールされたのを確認し、次のステップへ。
Bashのmanページデータがインストールされていないようなので、Bashを再インストールします。
(インストールしなおせば、man情報を含んでインストールされるはずです。)
manページデータがインストールされたはずなので再度Bashのマニュアルを確認してみます。
何故かマニュアルが引けません。
Dockerコンテナ内のYUMはマニュアルをインストールしない
原因はYUMの設定です。
/etc/yum.conf
を覗いてみます。
一番下の設定である tsflags=nodocs が原因です。 nodocs とあるように、このフラグが設定されていることでmanページデータがインストールされません。
これに対処する方法は2つあります。
対処法1: /etc/yum.conf
ファイルを書き換える
原因は /etc/yum.conf
ファイルなので、該当箇所をコメントして無効化します。
無効化したあとは、Bashを再インストールします。
マニュアルを確認してみます。
対処法2: 一時的に nodocs を無効化するオプションを付けてインストールする
yum
コマンドのコマンドライン引数で一時的に /etc/yum.conf
の任意のオプションを上書きしてやることができます。
マニュアルを確認してみます。
ひとこと
Dockerコンテナ内にmanページがインストールされないようになっているのは、配布を目的としたDockerイメージを軽量化するための設定としては正しいと言えます。
ただ、僕のようにUnixコマンドの学習環境としてDockerを利用している場合にはmanページがインストールされていると非常に便利です。
ディスカッション
コメント一覧
まだ、コメントがありません