2 условия, связанные с докерами:
-
во-первых, ваш запуск docker должен сопоставить порт mysql с портом хоста:
docker run -p host:container
(например: docker run -d -p 3306:3306 tutum/mysql
)
-
во-вторых, если вы используете докер в виртуальной машине (докер-машине, с boot2docker), вам нужно использовать ip из
docker-machine ip <VMname>
порта, сопоставленного с хостом.http://$(docker-machine ip <VMname>):hostPort
Если вам нужно использовать localhost
, вам нужно будет выполнить некоторую переадресацию портов на уровне VirtualBox :
VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306"
VBoxManage controlvm "boot2docker-vm" natpf1 "udp-port3306,udp,,3306,,$3306"
( controlvm
если VM запущена, modifyvm
VM остановлена) (замените « boot2docker-vm
" на имя вашего vm: см. docker-machine ls
)
2 условия, связанные с mysql:
-
Как показано на рисунке
nkratzke/EasyMySQL/Dockerfile
, вам необходимо включить удаленный доступ:# Enable remote access (default is localhost only, we change this # otherwise our database would not be reachable from outside the container) RUN sed -i -e"s/^bind-addresss*=s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
-
Вам необходимо создать пользователей при запуске вашей базы данных в образ вашего докера.
См. Напримерnkratzke/EasyMySQL/start-database.sh
, который вызываетсяDockerfile CMD
:/usr/sbin/mysqld & sleep 5 echo "Creating user" echo "CREATE USER '$user' IDENTIFIED BY '$password'" | mysql --default-character-set=utf8 echo "REVOKE ALL PRIVILEGES ON *.* FROM '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8 echo "GRANT SELECT ON *.* TO '$user'@'%'; FLUSH PRIVILEGES" | mysql --default-character-set=utf8 echo "finished"