2016-04-02 5 views
6

У меня есть файл для создания docker-файла для создания образа mysql и выставления порта на 3306, но когда я пытаюсь установить CMS, он дает мне ошибку, что он не может подключиться к базе данных. Я пытаюсь проверить порт 3306, и он показывает мне, что он открыт, так что mysql работает.Docker mysql cant подключиться к контейнеру

Почему две докерные контейнеры не могут видеть друг друга?

Вот мой докер-Compose файл:

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 может подключиться к MySQL с помощью db, как имя хоста и порта 3306.

Вы не сможете подключиться к локальному или 127.0.0.1, так как «локальному» является локальной внутри каждым контейнером, так , использование «localhost» в контейнере phpfpm попытается подключиться к базе данных MySQL внутри контейнера phpfpm, но там нет сервера.

Обратите внимание, что вы не должны публиковать ("3306":"3306") порты MySQL, если вы только подключить к базе данных внутри связанных контейнеров. Публикация портов предоставляет MySQL в общедоступном сетевом интерфейсе, который может быть «Интернет»

+2

Я исправил проблему с заменой «localhost» на «db». Спасибо за ваше время и всю вашу помощь :) –

Смежные вопросы