Docker:MySQL容器绑定主机mysqld套接字

问题描述 投票:0回答:1

我正在使用Docker 19.03.8,并想要设置两个容器:

  • 第一个是一个MySQL容器,该容器从主机绑定安装mysqld套接字。
  • 第二个是一个PHP容器,需要通过MySQL容器访问数据库。

两个容器都通过networks语句共享相同的网络。 (我不能将mysqld套接字直接绑定安装到PHP容器中,因为MySQL版本不同,因此MySQL容器也不同。)>

这是我的docker-compose.yml

文件:
...
database:
  build: .
  volumes:
    - /var/run/mysqld/mysqld.sock:/tmp/mysql.sock
...

用于MySQL的Dockerfile

FROM mysql:8.0.20
COPY my.cnf /etc/mysql/my.cnf

并且my.cnf

文件包含:
...
[mysql]
socket = /tmp/mysql.sock

[mysqld]
socket = /tmp/mysql.sock
...

不幸的是,我从MySQL容器中收到此错误消息:

2020-05-20T11:30:04.708067Z 0 [ERROR] [MY-010270] [Server] Can't start server : Bind on unix socket: Address already in use
2020-05-20T11:30:04.708406Z 0 [ERROR] [MY-010258] [Server] Do you already have another mysqld server running on socket: /tmp/mysql.sock ?
2020-05-20T11:30:04.709083Z 0 [ERROR] [MY-010119] [Server] Aborting

如果我从my.cnf

socket = /tmp/mysql.sock部分忽略[mysqld],则MySQL容器不会出现任何错误。但是,如果我随后尝试从PHP容器(mysql -h <what I specified in the networks statement> -u <user> -p <password>)连接到数据库,则只会得到一个空数据库。因此,我假设它使用默认套接字(/ var / run / mysqld / mysqld.sock)。

我不明白为什么这行不通,如果有人可以给我提示,我将不胜感激。

我正在使用Docker 19.03.8,并希望设置两个容器:第一个是MySQL容器,该容器通过绑定从主机挂载mysqld套接字。第二个是需要访问...的PHP容器...

php mysql docker unix-socket
1个回答
0
投票

您应该为此使用TCP连接。配置PHP容器以连接到数据库容器的Compose服务名称(database)和默认的MySQL端口(3306)。不要尝试在此处使用Unix套接字。

© www.soinside.com 2019 - 2024. All rights reserved.