У меня есть файл docker-compose для создания образа mysql и выставления порта на 3306, но когда я пытаюсь установить CMS, он выдает ошибку, что не может подключиться к базе данных. Я пытаюсь сканировать порт 3306, и он показывает мне, что он открыт, так что MySQL работает.
Почему два из докеров-контейнеров не могут видеть друг друга?
Вот мой файл docker-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
Чтобы подключиться к базе данных, используйте ссылку / псевдоним, который вы указали в качестве имени хоста. Таким образом, ваша CMS может подключиться к MySQL, используя db
в качестве имени хоста и порта 3306.
Вы не сможете подключиться к localhost или 127.0.0.1, потому что «localhost» является локальным хостом внутри каждый контейнер, поэтому, используя «localhost» в контейнере phpfpm, вы попытаетесь подключиться к базе данных MySQL внутри контейнера phpfpm, но там нет запущенного сервера.
Обратите внимание, что вам не нужно публиковать (
"3306":"3306"
) порты MySQL, если вы подключаетесь к базе данных только из связанных контейнеров. Публикация портов выставляет MySQL на общедоступный сетевой интерфейс, которым может быть «Интернет»
Других решений пока нет …