(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【コンテナ】Dockerfileを編集してログを標準出力に出す方法

スポンサーリンク

やりたいこと

Dockerfileの修正によってコンテナのログを標準出力に出すことでdocker logsで拾えるようにしたい。
例としてAapacheのコンテナを扱う。

環境情報
  • Amazon Linux 2
  • Docker 20.10.23

やり方

Dockerfileの中で以下のようにログと標準出力をリンクさせる。

RUN ln -sf /dev/stdout /var/log/httpd/access_log

例えば以下のようなDockerfileでイメージをビルドしてコンテナを起動すると

FROM registry.access.redhat.com/ubi8/ubi
RUN yum -y update
RUN yum -y install httpd
RUN ln -sf /dev/stdout /var/log/httpd/access_log
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh
CMD ["/run-httpd.sh"]


コンテナの中のログが標準出力にリンクされていて

$ docker exec -it 7f7dad545ab7 sh
sh-4.4# ls -l /var/log/httpd/
total 4
lrwxrwxrwx. 1 root root  .. access_log -> /dev/stdout
-rw-r--r--. 1 root root ... error_log

docker logs でも確認ができる。

$ docker logs 7f7dad545ab7
172.17.0.1 - - [... +0000] "GET / HTTP/1.1" 200 347 "-" "curl/8.0.1"

以下、補足です。

補足

Apacheであればhttpd.confでログの設定を変えることで出力先の変更ができますが、DockefileのRUN操作によって簡易的に同じ挙動を実現することができます。

ちなみに実際に動作確認をするまでのコマンドは以下となります。

$ docker image build -t apache:1.x -f Dockerfile .
...
$ docker run -d --name apache -p 8080:80 apache:1.x
...
$ curl localhost:8080
...

以上。