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

2024-02-18

我来自这里:

如何在主机网络上运行 docker-compose? https://stackoverflow.com/questions/56203642/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 中使用该主机套接字目录。

But:

当我启动时我得到:

无法启动服务器:绑定在 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

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

  1. 不要映射套接字文件本身(例如 mysqld.sock) - 相反,将相应的目录(例如 /var/run/mysqld/)映射到主机系统。

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

您将看到 - MySQL 将启动。

BUT:

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

我使用了一个简单的技巧:

systemctl edit docker

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用卷时无法在主机上使用 mysql 套接字 的相关文章

随机推荐