启用登录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