我将mysql数据库存储在/home/mysql
而不是/var/lib/mysql
中。该目录曾由mysql
拥有。但是,当我使用此yml文件运行命令docker-compose up
时:
version: '3'
services:
mariadb:
image: mariadb
restart: always
volumes:
- /home/mysql:/var/lib/mysql
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.6.4
environment:
- "ES_JAVA_OPTS=-Xms750m -Xmx750m"
- bootstrap.memory_lock=false
site:
build: .
volumes:
- "./app:/app"
links:
- mariadb:mysql
environment:
- DOCKER_IP=172.19.0.2
depends_on: ['elasticsearch','mariadb']
ports:
- "3000:3000"
docker容器可以运行,但/home/mysql
中的整个文件夹和文件归systemd-journal-remote
所有,这导致node
服务器无法连接到mariadb
。我必须停止docker实例,恢复mysql文件夹所有权并删除ib_logfile0
和ib_logfile1
。
为什么挂载/home/mysql
导致这样一个致命的问题?
更新
我的解决方案是添加user: "mysql"
:
version: '3'
services:
mariadb:
image: mariadb
restart: always
volumes:
- /home/mysql:/var/lib/mysql
user: "mysql"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.6.4
environment:
- "ES_JAVA_OPTS=-Xms750m -Xmx750m"
- bootstrap.memory_lock=false
site:
build: .
volumes:
- "./app:/app"
links:
- mariadb:mysql
environment:
- DOCKER_IP=172.19.0.2
depends_on: ['elasticsearch','mariadb']
ports:
- "3000:3000"
答案 0 :(得分:1)
您的用户uid
很可能与容器中用户systemd-journal-remote
的{{1}}相同。查看uid
。为避免混淆,请使用常见的mysqld
,或者使用ls -n
作为uid
进行测试。
答案 1 :(得分:1)
您应该使用--user
参数启动Docker的容器。如果您这样做并设置相同的uid:gid
作为MySQL存储的所有者,您将不会遇到权限问题。您必须在Docker Compose中检查具体操作方式,因为我向您展示了正常命令行执行的示例