使用卷时无法在主机上使用mysql套接字

时间:2019-05-20 04:43:34

标签: docker sockets docker-compose

我来自这里:

How to run docker-compose with host network?

我意识到的问题是,在将mysql_connect输入为主机时,localhost使用了套接字。结果,我的主机系统上的php无法找到套接字,因为该套接字位于容器中。

当我与compose-docker在一起时,我可以阅读

  

版本:“ 5.6.44”套接字:“ / var / run / mysqld / mysqld.sock”端口:3306 MySQL社区服务器(GPL)

所以我认为我在逻辑上要做的是在主机上输入php中的mysql_connect套接字配置,以指向/var/run/mysqld/mysqld.sock

但是它在我的容器中,所以找不到。

结果,我尝试将容器目录/var/run/mysqld映射到某个主机目录,以便随后可以在主机上的php.ini中使用该主机套接字目录。

但是:

我启动时会得到:

  

无法启动服务器:在unix套接字上绑定:权限被拒绝

     

您是否已经在套接字上运行了另一个mysqld服务器

因此映射套接字文件夹会给Docker容器带来读写问题。有什么解决办法吗?

我的yml文件是这样的:

version: '3.3'
services:
  sciodb:
    container_name: sciodb
    image: mysql:5.6
    restart: always
    environment:
      MYSQL_DATABASE: 'db'
      # So you don't have to use root, but you can if you like
      MYSQL_USER: 'myuser'
      # You can use whatever password you like
      MYSQL_PASSWORD: 'test1234'
      # Password for root access
      MYSQL_ROOT_PASSWORD: 'test1234'
    ports:
      # <Port exposed> : < MySQL Port running inside container>
      - '3306:3306'
    expose:
      # Opens port 3306 on the container
      - '3306'
      # Where our data will be persisted
    volumes:
      - /home/myuser/nmyapp_db:/var/lib/mysql
      - /media/sf_vmwareshare:/var/vmwareshare
      - /home/myuser/nmyapp_socket:/var/run/mysqld

1 个答案:

答案 0 :(得分:1)

我刚刚在CentOS 8上解决了同样的问题。 容器内部的MySQL进程没有写袜子文件的权限。

  1. 请勿将套接字文件本身(例如mysqld.sock)映射-而不是将此对应的目录(例如/ var / run / mysqld /)映射到主机系统。

  2. 正确设置此目录的权限(例如/ var / run / mysqld /)。检查主机上数据库目录的所有权(在您的情况下为/ home / myuser / nmyapp_db),并使用同一用户。

您将看到-MySQL将启动。

但是:

/ var / run /指向/ run并且是一个tmpfs-重新引导后权限消失了,MySQL将不再启动。

我使用的是简单的把戏:

systemctl edit docker

ExecStartPre=-mkdir /var/run/mariadb101/
ExecStartPre=chown systemd-coredump.input /var/run/mariadb101/

更改路径和用户名以匹配您的系统。