我们的网站框架旨在在xampp和docker环境中使用。我们正在通过主机名/ IP地址(开发,测试,登台,实时环境)识别数据库主机。使用xampp的人正在使用https://localhost
,因此他们获得了名为Development
的环境变量。与Docker合作的人们正在使用https://docker
作为主机。他们得到称为Development/Docker
的环境变量。我们需要这种区别,因为在php应用程序中,我们的xampp用户正在使用主机localhost
连接到其mysql服务。 Docker用户必须通过名为mysql
的主机(这是mysql-service的容器名称)进行连接。
由于最后发生的问题(在此不相关),我们希望为两个用户组提供有关数据库连接的独特解决方案:Docker用户应该能够使用主机
localhost
连接到他们的mysql服务
docker-compose.yaml
(为得到更好的概述而缩写):
version: '2'
services:
#######################################
# PHP application Docker container
#######################################
app:
build:
context: .
dockerfile: Dockerfile.development
links:
- mail
- mysql
- redis
ports:
- "80:80"
- "443:443"
- "10022:22"
- "3307:3306"
volumes:
- ./app/:/app/
- ./:/docker/
cap_add:
- SYS_PTRACE
env_file:
- etc/environment.yml
- etc/environment.development.yml
environment:
- POSTFIX_RELAYHOST=[mail]:1025
#######################################
# MySQL server
#######################################
mysql:
build:
context: docker/mysql/
dockerfile: MariaDB-10.Dockerfile
ports:
- "3306"
volumes:
- mysql:/var/lib/mysql
env_file:
- etc/environment.yml
- etc/environment.development.yml
#######################################
# phpMyAdmin
#######################################
# /// #
#######################################
# Mail
#######################################
# /// #
#######################################
# Redis
#######################################
# /// #
# Volumes
volumes:
mysql:
phpmyadmin:
redis:
我尝试了很多,并使用了docker-compose,但是好几个星期都没有找到解决方案。尝试使用链接,网络等。我认为我的Docker技能现在已经筋疲力尽...
我还添加了mysql.conf
:
bind-address = 0.0.0.0
有什么想法吗?
答案 0 :(得分:0)
这是因为docker的网络结构。
docker创建3个基本接口。 docker0
,host
和none
。
每个容器默认使用docker0。那么每个容器将具有一个虚拟网络接口,用于容器之间的通信。因此您可以使用地址为mysql
的数据库。
如果您要连接到地址为localhost
的数据库,则应将docker配置为使用host
网络模式(可以通过在docker compose文件中为应用程序服务的定义添加一行来实现) 。它将能够连接到系统上正在运行的每个应用程序。顺便说一下,您将失去与其他容器之间按其名称的通信。也许您失去了与Redis(与redis
地址相关联)的连接
在这种网络模式下,应部署每个依赖项或将其公开给您的本地主机。