Logging

apache2 docker容器以root使用者身份在我的主機上寫入日誌

  • November 17, 2021

我在我的 ubuntu 機器上執行一個 apache2 docker 容器,但它不斷將日誌寫入我的主機作業系統。詳情如下:

樣本/docker/apache2/Dockerfile

FROM php:5.6.34-apache
COPY ./sites-available/mysite.conf /etc/apache2/sites-available/mysite.conf
RUN a2dissite 000-default.conf
#RUN a2dissite default-ssl.conf
RUN a2ensite mysite.conf

和:

樣本/docker/apache2/sites-available/mysite.conf

<VirtualHost *:80>
   ServerAdmin admin@example.com
   ServerName localhost
   ServerAlias localhost
   #DocumentRoot /var/www/html
   DocumentRoot /var/www


   ErrorLog /dev/stderr
   CustomLog /dev/stdout combined

   #ErrorLog ${APACHE_LOG_DIR}/error.log
   #CustomLog ${APACHE_LOG_DIR}/access.log combined
   
</VirtualHost>

我建構/執行:

樣本/docker-compose.yaml

version: '3.8'
services:
 apache2-php:
   container_name: apache2-php-container
   image: apache2-php-image
   build:
     context: ./docker/apache2
   ports:
     - "8082:80"

但是logrun和文件夾是在我的 docker-compose.yaml 文件上方lock的根使用者下的一個文件夾下在我的主機上創建的:

$ ll
total 60
drwxrwxr-x   3 user user  4096 Nov 15 09:22 samples/
drwxr-xr-x   3 root root  4096 Nov 15 10:40 lock/
drwxr-xr-x   3 root root  4096 Nov 15 10:40 log/
drwxr-xr-x   3 root root  4096 Nov 15 10:40 run/

和:

├── log
│   └── apache2
│       ├── error.log
│       └── other_vhosts_access.log

我也在這裡嘗試過建議:

將 Apache2 日誌寫入標準輸出/標準錯誤?

但它沒有效果。

為什麼在我的主機上的那個位置創建這些文件夾/文件,我如何配置 apache2 容器只在容器內而不是在我的主機上寫入日誌?

這實在是不可能的。除非您volumes在 docker-compose 中定義,否則容器不能將任何內容寫入主機的文件系統。

證明與

> docker inspect apache2-php-container | jq .[].Mounts
> docker inspect apache2-php-container | jq .[].Volumes

您還可以通過在不祥主機的日誌文件夾中創建一個文件並嘗試在容器中找到它來反向證明這一點(您沒有提到此文件夾在容器中的位置或應該位於容器中的位置。注意:即使容器會寫文件到主機上,當然也可以從容器內的某個路徑訪問它 - 因為它需要安裝在某個地方)

我什至複製了您的層次結構並驗證沒有創建文件夾。

samples > docker-compose build
Building apache2-php
Sending build context to Docker daemon  3.584kB
...
Successfully tagged apache2-php-image:latest
samples > docker-compose up -d
Creating network "samples_default" with the default driver
Creating apache2-php-container ... done
> tree
.
└── samples
   ├── docker
   │   └── apache2
   │       ├── Dockerfile
   │       └── sites-available
   │           └── mysite.conf
   └── docker-compose.yaml

4 directories, 3 files

日誌記錄甚至轉到 docker 日誌輸出:

> curl -I http://localhost:8082/bla
HTTP/1.1 404 Not Found
Server: Apache/2.4.10 (Debian)

apache2-php-container | 172.21.0.1 - - [17/Nov/2021:12:34:16 +0000] "HEAD /bla HTTP/1.1" 404 140 "-" "curl/7.69.1"

您可能會在那裡遇到某種記憶體。嘗試清理您的系統(docker system prune -a -f(小心!))或在另一個未觸及的系統上進行測試。

提示:docker-compose build --no-cache

引用自:https://serverfault.com/questions/1083574