やりたいこと
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 ...
以上。