Todavía tengo problemas con la instalación de mysql en alpine en docker.
También necesito openjdk:8u201-jdk-alpine3.9.
Mi archivo acoplable:
FROM openjdk:8u201-jdk-alpine3.9 RUN apk update && \ apk add mysql mysql-client && \ rm -f /var/cache/apk/* && \ addgroup mysql mysql && \ mkdir run/mysqld && \ touch /var/run/mysqld/mysqld.sock && \ touch /var/run/mysqld/mysqld.pid && \ chown -R mysql:mysql /var/run/mysqld/mysqld.sock && \ chown -R mysql:mysql /var/run/mysqld/mysqld.pid && \ chmod -R 644 /var/run/mysqld/mysqld.sock && \ apk add openrc --no-cachePero, en el contenedor: - no hay servicio mysql (solo mariadb, pero probablemente sea una situación estándar para alpine) - no hay ningún archivo my.cnf en el directorio /etc/mysql
Cuando probé el comando mysql , recibí el error:
Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (111) Cuando probé el comando mysql -h 127.0.0.1 -P 3306 -u root , recibí el error:
Can't connect to MySQL server on '127.0.0.1' (115)Lo mismo para localhost.
En primer lugar, ¿por qué desea instalar mysql-server en esa imagen específica? Sugeriría usar 2 contenedores separados: uno para la base de datos mysql y otro para la aplicación que está desarrollando usando esa imagen openjdk.
Simplemente puede usar esta esencia https://gist.github.com/karlisabele/d0bebe3d27fc44a57d1db9a9abdff45a para crear una configuración donde su aplicación Java pueda conectarse a la base de datos mysql usando la base de database (el nombre del servicio) como nombre de host para el servidor mysql.
Consulte https://hub.docker.com/_/mysql para obtener configuraciones adicionales en la imagen mysql (debe definir el usuario MYSQL, la contraseña, el nombre de la base de datos, etc.)
ACTUALIZAR
Actualicé la esencia y agregué las variables de entorno necesarias para que mysql funcione... Reemplace los valores qwerty con los suyos y debería poder acceder a la base de datos desde su aplicación Java a través de la base de datos: 3306 usando el nombre de usuario y la contraseña proporcionados en el Variables de entorno
La definición de volúmenes al final del archivo le dice al demonio docker que queremos crear un volumen persistente en algún lugar del sistema de archivos host y usar mysql como alias. Entonces, cuando definimos los volúmenes del servicio de la base de datos, podemos simplemente usar mysql:/var/lib/mysql y en realidad montará una carpeta oscura que Docker creó en su sistema de archivos. Esto permitirá que la base de datos mysql tenga un estado persistente cada vez que inicie el servicio (porque montará los datos de su máquina host) y no tendrá que preocuparse por la ubicación real del volumen.
Puede ver todos los volúmenes ejecutando docker volumes ls
vim /etc/my.cnf.d/mariadb-server.cnf [mysqld] #skip-networking