为什么在运行docker容器之后,mysql数据所有权会更改为systemd-journal-remote

我有mysql数据库存储在/home/mysql而不是/var/lib/mysql 。 这个目录曾经被mysql拥有。 但是,当我运行命令docker-compose up这个yml文件:

 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 。 我必须停止ib_logfile0实例,恢复mysql文件夹的所有权并删除ib_logfile0ib_logfile1

为什么mount /home/mysql会导致这样一个致命的问题?

更新:

我的解决scheme是添加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" 

你应该用--user参数启动Docker的容器。 如果你这样做,并设置相同的uid:gid作为MySQL存储的拥有者,你将不会有权限的问题。 您必须检查在Docker Compose中如何完成此操作,因为我向您展示了常规命令行执行的示例

很可能,用户systemd-journal-remoteuid与容器中的用户mysqld uid相同。 用ls -n检查。 为了避免混淆,可以使用常见的uid ,或许以root:root身份进行testingroot:rootchmod o+rwx