Logging
apache2 docker容器以root使用者身份在我的主機上寫入日誌
我在我的 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"
但是
log
,run
和文件夾是在我的 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 容器只在容器內而不是在我的主機上寫入日誌?
這實在是不可能的。除非您
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