I am having some problems with the docker mysql container that I started using docker-compose. This is a long post (sorry!).
Here is my docker-compose.yml file:
db: image: mysql:5.7 ports: - "3306:3306" # I have tried both ports and expose "3306". Still doesn't work environment: - MYSQL_ROOT_PASSWORD="secret" - MYSQL_USER="django" - MYSQL_PASSWORD="secret" - MYSQL_DATABASE="myAppDB"
Then:
$> docker-compose build db uses an image, skipping #expected! $> docker-compose up <<LOTS OF OUTPUT>>
OK, so now I have mysql: 5.7 boot docker-loader container. Big! Or that? When testing in my django application, I get operational errors saying that the user is not allowed to connect to the database. Ok maybe this is my django?
$> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c7216f99ca0f mysql:5.7 "docker-entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp sharpfin_db_1 $> docker-machine ip dev 192.168.99.100 $> mysql -h 192.168.99.100 -P 3306 -u django -p Enter password: ERROR 1045 (28000): Access denied for user 'django'@'192.168.99.1' (using password: YES)
OK, maybe this has something to do with connecting to the docker container? What if I try to connect from a docker container?
$> docker exec -it c7216f99ca0f /bin/bash root@c7216f99ca0f :/
ok, so docker mysql won't let me connect, I don't know why. Let's see what happens when I try to do this without linking the dockers:
$> docker run --name run-mysql -e MYSQL_ROOT_PASSWORD="secret" -e MYSQL_USER="django" -e MYSQL_PASSWORD="secret" -e MYSQL_DATABASE="myAppDB" -p "3306:3306" mysql:5.7 <<LOTS OF OUTPUT SAME AS BEFORE>>
So, now we have a container with the same image as before, with the same settings. (I think this statement is probably not true - docker-compose does something different than running docker).
$> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73071b929e82 mysql:5.7 "docker-entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp run-mysql
Here is my container (called run-mysql). Let it connect!
$> mysql -h 192.168.99.100 -P 3306 -u django -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.12 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | myAppDB | +--------------------+ 2 rows in set (0.01 sec) mysql>
Good. You can come in. It's weird ... how about inside the container?
$> docker exec -it 73071b929e82 /bin/bash root@73071b929e82 :/# mysql -u django -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.12 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | myAppDB | +--------------------+ 2 rows in set (0.00 sec) mysql>
Well, I can log in from outside and inside the container when I launch docker, but not using docker-compose. What's happening? There must be something that docker-compose does behind the scenes, which changes the way the database is initialized.
All of the above is the same if I try with the root user. So this is not a problem with the django user.
Any ideas how to solve this problem?