I'm trying to install mysql inside a docker container,Tried various images from github, it seems they all manage to successfully install the mysql but when I try to run the mysql it gives an error:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
System specifications:
- Ubuntu 12,04 its on AWS
- Docker 0.10.0
Packages I tried so far:
- https://github.com/eugeneware/docker-wordpress-nginx
- https://github.com/tutumcloud/tutum-docker-mysql
Remember that you will need to connect to running docker container. So you probably want to use tcp instead of unix socket. Check output of docker ps
command and look for running mysql containers. If you find one then use mysql command like this: mysql -h 127.0.0.1 -P <mysql_port>
(you will find port in docker ps
output).
If you can't find any running mysql container in docker ps
output then try docker images
to find mysql image name and try something like this to run it:
docker run -d -p 3306:3306 tutum/mysql
where "tutum/mysql" is image name found in docker images
.
I had the same problem, in fact, I juste forgot to run the service after installation ..
Start mysql server :
/etc/init.d/mysql start
Don't know how do i achieve this, but, i've be able to reach MYSQL by typing
$ mysql -u root -h
mywebsite:
image: benftwc/pldev-webserver
volumes:
- ./mywebsite.fr/:/var/www/
working_dir: /var/www/
ports:
- "8009:8009"
command: php -S 0.0.0.0:8009
links:
- database
database:
image: library/mysql
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3310:3306
root@422f4d1f454a:/# mysql -u root -h 127.0.0.1 -p3310
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@422f4d1f454a:/# mysql -u root -h database -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g...........
If you don't have MySQL installed on your host, you have to execute it in the container (https://docs.docker.com/engine/reference/commandline/exec/#/examples gives explanation about docker run vs docker exec).
Considering your container is running, you might use
docker exec yourcontainername mysql -u root -p
to access to the client.
Also, if you are using Docker Compose, and you've declared a mysql db service named database, you can use :
docker-compose exec database mysql -u root -p
Check out what's in your database.yml
file. If you already have your plain Rails app and simply wrapping it with Docker, you should change (inside database.yml
):
socket: /var/run/mysqld/mysqld.sock #just comment it out
to
host: db
where db
is the name of my db-service from docker-compose.yml
. And here's my docker-compose.yml
:
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
links:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
You start your app in console (in app folder) as docker-compose up
. Then WAIT 1 MINUTE (let your mysql service to completely load) until some new logs stop appearing in console. Usually the last line should be like
db_1 | 2017-12-24T12:25:20.397174Z 0 [Note] End of list of
non-natively partitioned tables
Then (in a new terminal window) apply:
docker-compose run web rake db:create
and then
docker-compose run web rake db:migrate
After you finish your work stop the loaded images with
docker-compose stop
Don't use docker-compose down
here instead because if you do, you will erase your database content.
Next time when you want to resume your work apply:
docker-compose start
The rest of the things do exactly as explained here: https://docs.docker.com/compose/rails/
I might be little late for answer and probably world knows about this now.
All you have to open your ports of docker container to access it. For example while running the container :
docker run --name mysql_container -e MYSQL_ROOT_PASSWORD=root -d
-p 3306:3306
mysql/mysql-server:5.7
This will allow your container's mysql to be accessible from the host machine. Later you can connect to it.
docker exec -it mysql_container mysql -u root -p
Months after this question, I've levelup my Docker skills. I should use Docker container name instead.
That use dokerized-nginx as bridge to expose ip+port of the container.
Within WEB configuration, I now use mysql://USERNAME:PASSWORD@docker_container_name/DB_NAME
to access to Mysql socket through docker (also works with docker-compose, use compose-name instead of container one)
For me it was simply a matter of restarting the docker daemon..