apache2 docker 容器以 root 用户身份在我的主机上写入日志

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 [email protected]
    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,在我的主机上runlock在根用户下创建了一个文件夹多于我的docker-compose.yaml文件:

$ 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 日志写入 stdout/stderr?

但没有效果。

为什么这些文件夹/文件会在我的主机上的该位置创建,以及如何配置 apache2 容器以仅在容器内写入日志而不是在主机上写入日志?

答案1

这实际上是不可能的。除非你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 logs 输出:

> 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

相关内容