我来自这里:
如何在主机网络上运行 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文件的权限。
-
不要映射套接字文件本身(例如 mysqld.sock) - 相反,将相应的目录(例如 /var/run/mysqld/)映射到主机系统。
-
正确设置该目录的权限(例如/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(使用前将#替换为@)