Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

560
Vistas
Docker: comandos MySQL dentro de Dockerfile usando RUN (ERROR 2002)

Estoy usando Docker para crear un dockerfile con mysql como imagen base:

 FROM mysql #set root pass ENV MYSQL_ROOT_PASSWORD password #update linux RUN apt-get update #create database RUN mysql -u root -ppassword -e "CREATE DATABASE dbname" #install vim RUN apt-get install vim -y

El dockerfile falla en el paso en el que intento crear una base de datos, no termina de construirse y recibo este error:

ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.sock'

Cuando elimino el comando de ejecución de la base de datos #create, el dockerfile se compilará y puedo ejecutar un contenedor desde esa imagen. Sé que no es un problema con el servidor mysql, ya que puedo ingresar al contenedor y ejecutar el comando mysql manualmente con éxito y el estado del servicio se está ejecutando.

El uso de una variable de entorno, es decir, MYSQL_ROOT_PASSWORD dentro del archivo, también me permite crear una base de datos con éxito, pero esto solo funcionará con una única base de datos. Necesito poder usar el comando mysql para realizar consultas, como crear bases de datos adicionales, asignar usuarios, etc. .

Esto puede deberse a que necesito especificar el host y el puerto del contenedor acoplable, pero aún no me permite conectarme.

 RUN mysql -u root -ppassword -h 127.0.0.1 -P 3308 -e "CREATE DATABASE dbname"

Extrañamente, hacer esto también bloquea el contenedor y lo pone en un estado en el que se bloqueará nuevamente al iniciarse cada vez que intente reiniciarlo nuevamente.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Creo que el problema podría ser que el servicio no se inició dentro del contenedor utilizado para compilar su Dockerfile.

  • Intente iniciar y configurar el servidor MySQL en un solo paso. Como referencia, consulte este archivo: https://github.com/dockerfile/mysql/blob/master/Dockerfile
over 4 years ago · Santiago Trujillo Denunciar

0

Use los comandos dados a continuación en su Dockerfile:

 RUN service mysql restart && echo 'CREATE DATABASE db_name;' | mysql -uroot - pYOUR_ROOT_PASSWORD
over 4 years ago · Santiago Trujillo Denunciar

0

Tenía el mismo problema: al iniciar el contenedor y ejecutar un conjunto de instrucciones RUN , o secuencias de comandos .sh o .sql en /docker-entrypoint-initdb.d/ , no se pudo establecer conexión con el servidor de la base de datos.

Encontré la solución por un comentario de @wpalmer en la imagen mysql:

Los scripts de inicio ejecutados por el punto de entrada, internamente, usan la variable "${mysql[@]}" para llamar a mysql (por ejemplo, al cargar archivos .sql ubicados en el directorio docker-entrypoint-initdb.d. Cualquier archivo .sh que son procesados por el punto de entrada se incluyen al "aprovisionarlos", lo que significa que la variable está disponible para su uso por cualquier archivo .sh que se ejecute).

Entonces, ¿qué significa esto para usted, en lugar de proporcionar el comando mysql simple con el usuario, pase, etc. como en

 RUN mysql -u root -ppassword -e "CREATE DATABASE dbname"

use el marcador de posición en su lugar:

 RUN "${mysql[@]}" -e "CREATE DATABASE dbname"
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda