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

时间:2017-08-01 07:03:57

标签: mysql docker docker-compose

我想从mysql容器中的主机挂载一个目录,以便mysql将其日志写入该目录,然后我就可以从主机访问这些日志了。

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

volumes:
  - ./logs/mysql:/var/log/mysql

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

1 个答案:

答案 0 :(得分:5)

所以我运行了默认图像并进行了一些观察

  1. 默认情况下,/var/log/mysql中根本不会创建日志文件。这是因为默认my.cnf已对error-log设置进​​行了评论
  2. 您需要创建自己的配置文件以添加这些设置并将其映射到/etc/mysql/mysql.conf.d
  3. /entrypoint.sh确实更改了/var/lib/mysql上的权限,但未更改/var/log/mysql上的权限
  4. 因此,要解决此问题,请添加一个包含以下内容的test.cnf文件

    [mysqld]
    log-error   = /var/log/mysql/error.log
    general_log  = /var/log/mysql/log_output.log
    

    使用以下设置更新您的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"
    

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