我正在使用Docker 19.03.8,并想要设置两个容器:
两个容器都通过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容器...
您应该为此使用TCP连接。配置PHP容器以连接到数据库容器的Compose服务名称(database
)和默认的MySQL端口(3306)。不要尝试在此处使用Unix套接字。