为什么在运行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_logfile0
和ib_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-remote
的uid
与容器中的用户mysqld
uid
相同。 用ls -n
检查。 为了避免混淆,可以使用常见的uid
,或许以root:root
身份进行testingroot:root
用chmod o+rwx
。