我来自这里:
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
答案 0 :(得分:1)
我刚刚在CentOS 8上解决了同样的问题。 容器内部的MySQL进程没有写袜子文件的权限。
请勿将套接字文件本身(例如mysqld.sock)映射-而不是将此对应的目录(例如/ var / run / mysqld /)映射到主机系统。
正确设置此目录的权限(例如/ 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/
更改路径和用户名以匹配您的系统。