【问题标题】:Mount logs of mysql container in host directory在主机目录中挂载mysql容器的日志
【发布时间】:2017-08-01 07:03:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您仍然可以从任何拥有 sudo 权限的人那里访问它们。
  • @NigelRen 问题是 mysql 不会将日志写入目录,除非明确授予它这样做的权限。
  • 你用的是哪个mysql镜像?
  • @TarunLalwani 我正在使用mysql:latest image id= c73c7527c03a

标签: mysql docker docker-compose


【解决方案1】:

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

  1. 默认情况下,/var/log/mysql 中根本不会创建日志文件。这是因为默认的 my.cnf 已注释了 error-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

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

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

【讨论】:

  • 我认为这可能是正确的,但我无法让它发挥作用。如果我使用空白入口点,则 docker-compose.yml 文件无效,并且如果我完全删除 entrypoint,则容器退出并显示错误代码 0。在第二种情况下,我认为默认入口点因使用而被覆盖的command。我正在努力让它工作,当它工作时,我认为这应该被接受:)
  • 不工作,没有错误,容器仍然退出,错误代码为 0。
  • 让我检查一下。我使用 docker 运行,但解决方案是基于 docker-compose
  • 如果有帮助,我只使用docoker-compose.yml mysql-database 的一项服务并测试您在该服务上提供的代码。
  • 我的错误是我错过了在默认 CMD 的 entrypoint.sh 之后添加 mysqld。立即查看更新的答案
猜你喜欢
  • 1970-01-01
  • 2020-09-20
  • 2014-06-19
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 2021-11-29
  • 2019-01-13
  • 2017-12-27
相关资源
最近更新 更多