启用登录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中来改进我的方法,但是这对我来说仍然很奇怪。

回答:

连接到容器并创建3个文件,将它们插入mysql并重新启动容器后,日志记录将按预期工作。

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


编辑:使用您的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容器 的全部内容, 来源链接: utcz.com/qa/429605.html

回到顶部