在主机目录中挂载mysql容器的日志

Ayu*_*hya 3 mysql docker docker-compose

我想从mysql容器内的主机安装目录,以便mysql将其日志写入该目录,并且我能够从主机访问那些日志。

为此,我使用以下卷配置:

volumes:
  - ./logs/mysql:/var/log/mysql
Run Code Online (Sandbox Code Playgroud)

但是正如答案所指出的,主机用户和容器用户之间存在权限问题。那里的解决方案是使用命名卷,但是我想要的是在主机上的方便目录中访问这些日志。不在docker的内部目录中。

Tar*_*ani 5

因此,我运行了默认图像并进行了少量观察

  1. 默认情况下,根本不创建日志文件/var/log/mysql。这是因为默认设置中已注释my.cnferror-log设置
  2. 您需要创建自己的配置文件以添加这些设置并将其映射到内部 /etc/mysql/mysql.conf.d
  3. /entrypoint.sh不更改的权限/var/lib/mysql,但不/var/log/mysql

因此,要解决此问题,请添加test.cnf具有以下内容的文件

[mysqld]
log-error   = /var/log/mysql/error.log
general_log  = /var/log/mysql/log_output.log
Run Code Online (Sandbox Code Playgroud)

并使用以下设置更新您的docker-compose

version: '2'

services:
  mysql:
    image: mysql:latest
    volumes:
      - ./logs:/var/log/mysql
      - ./test.cnf:/etc/mysql/mysql.conf.d/test.cnf
    environment:
      MYSQL_ROOT_PASSWORD: root
    entrypoint: ""
    command: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"
Run Code Online (Sandbox Code Playgroud)

这样可以确保在运行入口点脚本之前已设置适当的权限