docker查看mysql日志_启用docker mysql容器中的日志记录

我正在尝试熟悉docker生态系统并尝试设置一个mysql数据库容器.使用docker-compose,它看起来像:

version: '2'

services:

db:

image: mysql:5.6.33@sha256:31ad2efd094a1336ef1f8efaf40b88a5019778e7d9b8a8579a4f95a6be88eaba

volumes:

- "./db/data:/var/lib/mysql"

- "./db/log:/var/log/mysql"

- "./db/conf:/etc/mysql/conf.d"

restart: "yes"

environment:

MYSQL_ROOT_PASSWORD: rootpw

MYSQL_DATABASE: db

MYSQL_USER: db

MYSQL_PASSWORD: dbpw

我的conf目录包含一个文件:

[mysqld]

log_error =/var/log/mysql/mysql_error.log

general_log_file=/var/log/mysql/mysql.log

general_log =1

slow_query_log =1

slow_query_log_file=/var/log/mysql/mysql_slow.log

long_query_time =2

log_queries_not_using_indexes = 1

不幸的是我没有得到任何日志文件.设置本身是正确的,并使用cnf文件.连接到容器并创建3个文件后,将它们chown到mysql并重新启动容器,日志记录按预期工作.

我很确定这是一种常见的情况,而我目前的运行方式似乎非常愚蠢.这样做的正确方法是什么?

我可以通过在Dockerfile中移动所有这些东西来改进我的方法,但这对我来说仍然很奇怪.

解决方法:

After connecting to the container and creating the 3 files, chown them to mysql and restarting the container, the logging is working as expected.

这指向主机卷权限问题.当您从容器映射到主机时,没有对用户ID进行映射,并且容器内的uid附加的名称可能与外部非常不同.您需要使用容器用户可以写入的内容初始化目录权限.一种简单的方法是创建一个有权写入主机和容器上的文件的组,然后在映像和主机操作系统上将各种用户添加到该组.另一个选项是使用您不能直接从主机访问的命名文件系统,并使用映像的目录权限对其进行初始化.

编辑:使用docker-compose.yml命名卷的示例非常简单:

version: '2'

volumes:

mysql-data:

driver: local

mysql-log:

driver: local

mysql-conf:

driver: local

services:

db:

image: mysql:5.6.33

volumes:

- "mysql-data:/var/lib/mysql"

- "mysql-log:/var/log/mysql"

- "mysql-conf:/etc/mysql/conf.d"

restart: unless-stopped

environment:

MYSQL_ROOT_PASSWORD: rootpw

MYSQL_DATABASE: db

MYSQL_USER: db

MYSQL_PASSWORD: dbpw

请注意,我还从您的图像名称中删除了sha256,此引用会阻止您拉出图像的修补版本.我也更喜欢“除非停止”重启策略,以便Docker在重新启动时确实需要.

标签:docker,mysql,logging

来源: https://codeday.me/bug/20191001/1839129.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值