Docker“无法通过套接字连接到本地MySQL服务器”

我是Docker的新手。 我设法用我想要的东西(与Apache,PHP,MySQL,MailHog和supervisord的CentOS)build立一个图像。它工作正常。

现在,我想要做的是把我的图像(一个容器)变成多个图像/容器:一个用于web ,一个用于db等。

我设法build立了这些不同的图像,但我通过docker-composer.ymlwebdb连接在一起时遇到了问题。 这是我有什么:

 web: container_name: centosweb image: fab/centosweb ports: - "80:80" volumes: # Single files - ./config/httpd.conf:/etc/httpd/conf/httpd.conf # Directories - ./vhosts:/var/www/html - /Users/fabien/Dropbox/AppData/XAMPP/web/bilingueanglais/public_html:/var/www/html/bilingueanglais - ./logs/apache:/etc/httpd/logs # This will include access_log(s) and error_log(s), including PHP errors. links: - db db: container_name: centosdb image: fab/centosdb volumes: # Single files - ./config/my.cnf:/etc/my.cnf # Directories - ./mysqldata:/var/lib/mysql - ./logs/mysql:/var/log/mysql 

docker ps的输出是这样的:

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 95048de7a6c4 fab/centosweb "supervisord -n" 14 minutes ago Up 14 minutes 22/tcp, 8025/tcp, 0.0.0.0:80->80/tcp centosweb eab3047a2dde fab/centosdb "supervisord -n" 14 minutes ago Up 14 minutes 22/tcp, 80/tcp, 8025/tcp centosdb 

试图连接到我的虚拟主机,我得到一个数据库错误:

无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地MySQL服务器

但是,我可以连接到centosdb,inputMySQL,并确认数据库在那里(即:数据库服务器本身运行良好。)

我到目前为止的理解是, 我错过了一种方法来告诉MySQL允许来自web应用程序的连接,而不是默认行为(来自localhost连接)。但是,我很困惑如何做到这一点。

这是非常相似的这个问题,但后者不包含我正在寻找的细节。


编辑: db容器的Dockerfile的来源。

 FROM centos:6.9 # Install MySQL (MariaDB) # Warning: the repo is super slow in my experience (eg: 15 min for 191 MB.) RUN yum -y update ADD MariaDB.repo /etc/yum.repos.d/MariaDB.repo RUN yum install -y MariaDB-server MariaDB-client # Install supervisord # EPEL = Extra Packages for Enterprise Linux -- used for python RUN rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm RUN yum install -y python-pip && pip install "pip>=1.4,<1.5" --upgrade RUN pip install supervisor ## # START SERVER # port 22: SSH # port 80: TCP, HTTP # port 8025: MailHog UI (web) ## ADD supervisord-db.conf /etc/supervisord.conf EXPOSE 22 80 8025 CMD ["supervisord", "-n"] # MEMO · BUILD THE IMAGE: # docker build -t fab/centosdb . 

你的应用程序如何configuration为与MySQL交谈? 而不是localhost:3306你需要告诉你的应用程序连接到db:3306 MySQL。 该链接将MySQL容器的DNS名称设置为db并且您的应用程序应该能够parsing此DNS名称以获取MySQL容器的正确IP地址。