2017-05-09 126 views
0

我是Docker的新手。我設法用我想要的東西(CentOS與Apache,PHP,MySQL,MailHog和supervisord)構建一個映像。它工作正常。現在Docker「無法通過套接字連接到本地MySQL服務器」

,我想要做的就是把我的形象(一個容器)分成多張圖片/容器:一爲web,一個用於db

我設法建立這些不同的圖像,但我無法通過docker-composer.yml連接webdb。以下是我有:

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應用程序而不是默認行爲(連接來自localhost。)但是,我很困惑如何做到這一點。

這與this question非常相似,但後者不包含我正在尋找的細節。


編輯:Dockerfiledb容器的來源。

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 . 
+1

你是否指向mysql? db:3306('web'看到的主機名是'db' – Robert

+0

我的意思是,在應用程序配置文件 – Robert

+0

請發佈'fab/centosdb'圖片的'Dockerfile'。另外,確保你指向'db' service as @Robert said。 – kstromeiraos

回答

1

您的應用程序如何配置爲與MySQL交談?而不是localhost:3306您需要告訴您的應用程序連接到MySQL在db:3306。該鏈接將MySQL容器的DNS名稱設置爲db,並且您的應用程序應該能夠解析此DNS名稱以獲取MySQL容器的正確IP地址。

+0

這將是什麼樣子? –

+0

我們不知道,這是您的應用程序。你是如何首先與MySQL建立連接的? –

+0

我以爲'鏈接: - 數據庫在Docker撰寫文件就足夠了。 –

相關問題