mysql - 将mysql容器的日志挂载到宿主目录

标签 mysql docker docker-compose

我想在 mysql 容器中从主机挂载一个目录,以便 mysql 将其日志写入该目录,我将能够从主机访问这些日志。

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

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

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

最佳答案

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

  1. 默认情况下,日志文件根本不会在 /var/log/mysql 中创建。这是因为默认的 my.cnferror-log settings commented
  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

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

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

关于mysql - 将mysql容器的日志挂载到宿主目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45431074/

相关文章:

php - 分组依据并显示该组的最新进入日期

mysql - 使用两行从另一个表中删除重复项的最快方法

docker - docker 的英特尔销

Python连接到firebird docker数据库

scala - Playframework异常的CPU负载

docker - 使用 docker-compose 时无法连接到 postgres

elasticsearch - 使用 docker 环境变量在 elasticsearch 中启用身份验证

Mysql 订单日期 按 m/h/s

mysql - 如何更新我的 sql 5.0 查询

docker-compose 内部 DNS 服务器 127.0.0.11 连接被拒绝