I have a problem with docker-compose and mysql:
docker-compose.yml
version: \'2\'
services:
db:
image: mysql
volumes:
- \"./sito/db/:
we can use
docker container run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=password mysql
you can give any name and any password
According the documentation, instead of MYSQL_ROOT_PASSWORD:
you have to use - and = and also you should use a 'password'
The result it will be:
- MYSQL_ROOT_PASSWORD=some_password
In your example:
version: '2'
services:
db:
image: mysql
volumes:
- "./sito/db/:/var/lib/mysql"
ports:
- "3306:3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=some_password
It looks like you're setting the MYSQL_ROOT_PASSWORD
to nothing. Per the documentation, it is required.
https://hub.docker.com/_/mysql/
MYSQL_ROOT_PASSWORD
This variable is mandatory and specifies the password that will be set for the MySQL root superuser account.
The problem will appear if you don't specify a value for MYSQL_ROOT_PASSWORD
(other cases explained below).
You can use one of the following syntax below:
# syntax 1
environment:
MYSQL_ROOT_PASSWORD: strongrootpassword
# syntax 2
environment:
- MYSQL_ROOT_PASSWORD=strongrootpassword
If you wish to use blank/empty password then use the following:
MYSQL_ALLOW_EMPTY_PASSWORD=1
If you wish to set a random password then use the following:
MYSQL_RANDOM_ROOT_PASSWORD=1
Then you can get the generated password using
docker logs container_name_or_id
In the end you need to specify ONE of MYSQL_ROOT_PASSWORD
, MYSQL_ALLOW_EMPTY_PASSWORD
and MYSQL_RANDOM_ROOT_PASSWORD
according to the entrypoint of MySQL image:
-z
is to verify that the variable is not emptyif [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
echo >&2 'error: database is uninitialized and password option is not specified '
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
exit 1
fi
I just wanted to point out something, if using docker run
command in terminal and not docker-compose, this would be the command:
docker run -e MYSQL_ROOT_PASSWORD=password mysql_image
Just notice that it won't work if you put -e MYSQL_ROOT_PASSWORD=password
after mysql_image