我是 Docker 的新手。我设法用我想要的东西构建了一个图像(CentOS 与 Apache、PHP、MySQL、MailHog 和 supervisord。)它运行良好。
现在,我要做的是将我的图像(一个容器)变成多个图像/容器:一个用于 web
, 一个用于 db
等
我设法构建了这些不同的图像,但我无法链接 web
和 db
一起通过 docker-composer.yml
.这是我所拥有的:
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
尝试连接到我的虚拟主机时,出现数据库错误:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
但是,我可以连接到 centosdb,进入 MySQL,并确认数据库在那里(即:数据库服务器本身运行良好。)
到目前为止,我的理解是我缺少一种方法来告诉MySQL 允许来自web
的连接。 app 而不是默认行为(来自 localhost
的连接。)但是,我对如何做到这一点感到困惑。
这与 this question 非常相似但后者不包含我正在寻找的细节。
编辑:Dockerfile
的来源对于 db
容器。
FROM centos:6.9
# Install MySQL (MariaDB)
# Warning: the repo is super slow in my experience (e.g.: 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 .
最佳答案
如何配置您的应用程序以与 MySQL 通信?而不是 localhost:3306
您需要告诉您的应用程序连接到位于 db:3306
的 MySQL。该链接将 MySQL 容器的 DNS 名称设置为 db
,您的应用程序应该能够解析此 DNS 名称以获得 MySQL 容器的正确 IP 地址。
关于mysql - Docker "Can' t 通过socket连接本地MySQL服务器",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43871040/