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

时间:2017-11-13 13:51:36

标签: mysql docker docker-compose mariadb archlinux

我将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_logfile0ib_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"

2 个答案:

答案 0 :(得分:1)

您的用户uid很可能与容器中用户systemd-journal-remote的{​​{1}}相同。查看uid。为避免混淆,请使用常见的mysqld,或者使用ls -n作为uid进行测试。

答案 1 :(得分:1)

您应该使用--user参数启动Docker的容器。如果您这样做并设置相同的uid:gid作为MySQL存储的所有者,您将不会遇到权限问题。您必须在Docker Compose中检查具体操作方式,因为我向您展示了正常命令行执行的示例