2016-04-02 111 views
6

我有docker-compose文件來創建mysql映像並將端口暴露給3306,但是當我嘗試安裝CMS時,它給我錯誤,它無法連接到數據庫。我嘗試掃描端口3306,它顯示它已經打開,所以mysql正在運行。碼頭工人mysql無法連接到容器

爲什麼兩個碼頭集裝箱看不到對方?

這裏是我的搬運工,撰寫文件:

phpfpm: 
    restart: always 
    extends: 
    file: php-fpm-5.6.yml 
    service: phpfpm 
    links: 
    - db:db 

nginx: 
    restart: always 
    image: nginx 
    ports: 
    - "8000:80" 
    links: 
    - phpfpm:phpfpm 
    volumes: 
    - ./nginx/vhost.conf:/etc/nginx/conf.d/default.conf 
    - ./app:/var/www/html 
    - ./log/nginx:/var/log/nginx 

db: 
    restart: always 
    image: mysql 
    ports: 
    - "3306:3306" 
    environment: 
    MYSQL_ROOT_PASSWORD: 123456 
    MYSQL_USER: user 
    MYSQL_PASSWORD: password 
    MYSQL_DATABASE: database 
+0

我嘗試在服務器上,並與固定的IP,這是很好的。但是localhost/127.0.0.1有什麼問題? –

回答

14

要連接到數據庫,使用您的主機提供的鏈接/別名。所以,你可以CMS使用db作爲主機名和端口連接到MySQL 3306

您將無法連接到本地主機或127.0.0.1,因爲「localhost」的是裏面localhost的每個容器,所以,在phpfpm容器中使用「localhost」將嘗試連接到phpfpm容器內的MySQL數據庫,但沒有服務器在那裏運行。

注意,您不必發佈"3306":"3306")MySQL的端口,如果你只從鏈接的容器內連接到數據庫。公開的網絡接口上公開的MySQL端口,可能是「互聯網」

+2

我解決了用「db」替換「localhost」的問題。感謝您的時間和所有的幫助:) –

相關問題