为什么 mysql 数据所有权在 运行 一个 docker 容器之后更改为 systemd-journal-remote
Why did mysql data ownership change to systemd-journal-remote after running a docker container
我将 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"
很可能,您的用户 systemd-journal-remote
的 uid
与容器中用户 mysqld
的 uid
相同。用 ls -n
检查。为避免混淆,要么使用常见的 uid
,要么使用 chmod o+rwx
.
测试 root:root
您应该使用 --user
参数启动 Docker 的容器。如果您这样做并将相同的 uid:gid
设置为 MySQL 存储的所有者,您将不会遇到权限问题。您必须在 Docker Compose 中检查具体如何执行此操作,因为我向您展示了正常命令行执行的示例
我将 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"
很可能,您的用户 systemd-journal-remote
的 uid
与容器中用户 mysqld
的 uid
相同。用 ls -n
检查。为避免混淆,要么使用常见的 uid
,要么使用 chmod o+rwx
.
root:root
您应该使用 --user
参数启动 Docker 的容器。如果您这样做并将相同的 uid:gid
设置为 MySQL 存储的所有者,您将不会遇到权限问题。您必须在 Docker Compose 中检查具体如何执行此操作,因为我向您展示了正常命令行执行的示例