Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

374
Visualizações
Docker: MySQL rechaza la IP del host a menos que lo reinicie manualmente

Aquí está mi Dockerfile:

 FROM debian:jessie-backports RUN apt-get update --yes && apt-get upgrade --yes RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ git \ curl \ build-essential\ libssl-dev\ ca-certificates\ mysql-server\ redis-server\ elasticsearch USER root ENV HOME /root # MYSQL SETUP RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/#bind-address = 0.0.0.0/" /etc/mysql/my.cnf RUN sed -i -e"s/^#max_connections\s*=\s*100/max_connections = 200/" /etc/mysql/my.cnf RUN echo "\n[mysqld]\nskip-grant-tables\n" >> /etc/mysql/my.cnf VOLUME ["/var/lib/mysql", "/var/log/mysql"] EXPOSE 3306 # REDIS SETUP RUN echo "daemonize yes\nbind 0.0.0.0" >> /etc/redis/redis-serve.conf RUN sed 's/^daemonize no/daemonize yes/' -i /etc/redis/redis.conf \ && sed 's/^bind 127.0.0.1/bind 0.0.0.0/' -i /etc/redis/redis.conf \ && sed 's/^# unixsocket /unixsocket /' -i /etc/redis/redis.conf \ && sed 's/^# unixsocketperm 755/unixsocketperm 777/' -i /etc/redis/redis.conf \ && sed '/^logfile/d' -i /etc/redis/redis.conf VOLUME ["/var/lib/redis", "/var/log/redis"] EXPOSE 6379 6380 # ELASTICSEARCH SETUP RUN sed 's/^#START_DAEMON=true/START_DAEMON=true/' -i /etc/default/elasticsearch VOLUME ["/opt/elasticsearch/data", "/opt/elasticsearch/logs"] EXPOSE 9200 9300 ADD docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh RUN chmod 777 /usr/local/bin/docker-entrypoint.sh ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

El punto de entrada:

 #!/bin/bash /etc/init.d/mysql start /etc/init.d/redis-server start /etc/init.d/elasticsearch start /bin/bash

Y el comando que estoy ejecutando para iniciar el contenedor:

 docker run -i -t -p 3306:3306 -p 6379:6379 -p 9200:9200 -p 9300:9300 assethost

Quiero conectarme al servidor MySQL que se ejecuta en el contenedor desde el host, pero esto es lo que sucede cuando intento conectarme:

ERROR 1130 (HY000): Host '192.168.99.1' is not allowed to connect to this MySQL server

Tanto Redis como Elasticsearch se exponen muy bien. MySQL solo comenzará a aceptar hosts externos si lo reinicio manualmente desde el shell Bash que aparece desde el punto de entrada cuando ejecuto el contenedor. Tengo que ejecutar /etc/init.d/mysql restart . Solo entonces, puedo conectarme con éxito desde el host usando el cliente MySQL.

Tenga en cuenta que estoy usando docker-machine , por lo que tengo que darle al cliente MySQL la IP del host para poder conectarme.

¿Cómo puedo conectarme desde el host a la instancia de MySQL que se ejecuta en el contenedor sin tener que reiniciar MySQL manualmente?

Docker versión 1.12.1, compilación 23cf638

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Descubrí una manera de aplicar la opción skip-grant-tables al inicio.

Solución alterna

En docker-entrypoint.sh, cambié /etc/init.d/mysql start a

HOME=/etc/mysql /usr/bin/mysqld_safe > /dev/null 2>&1 &

Otros cambios

Como ya había una sección [mysqld] en my.cnf, cambié la siguiente línea en Dockerfile RUN echo "\n[mysqld]\nskip-grant-tables\n" >> /etc/mysql/my.cnf

a

RUN sed -i '/\[mysqld\]/ a skip-grant-tables\nskip-name-resolve' /etc/mysql/my.cnf

Agregué skip-name-resolve para que mysql no intente resolver los nombres de las direcciones IP locales.

Advertencias

La solución alternativa ya no funciona cuando se ejecuta /etc/init.d/mysql restart , pero /etc/init.d/mysql stop; /etc/init.d/mysql start conservó la opción 'skip-grant-tables'.

over 4 years ago · Santiago Trujillo Relatório

0

Supongo que MySQL ya comenzó después de su instalación y ejecutar sed para cambiar la configuración no surtirá efecto. El punto de entrada que tiene tiene mysql start , pero probablemente esté viendo que MySQL ya se está ejecutando y no está haciendo nada. Intente cambiar ese comando a mysql restart , para que su secuencia de comandos bash de punto de entrada se convierta en:

 #!/bin/bash /etc/init.d/mysql restart /etc/init.d/redis-server start /etc/init.d/elasticsearch start /bin/bash
over 4 years ago · Santiago Trujillo Relatório

0

Está utilizando el indicador skip-grant-tables para iniciar sesión sin contraseña. Creo que debido a algunas razones del script /etc/init.d/mysql , el indicador se ignora en el primer inicio, lo que hace que se rechace la conexión desde root@192.168.99.1 . Creo que Docker no tiene nada que ver con este problema.

Para responder a su pregunta, no tiene que reiniciar a mano , puede cambiar su punto de entrada a:

 #!/bin/bash /etc/init.d/mysql start # Wait for mysql to be fully up, then restart (eg, 5 seconds) sleep 5 /etc/init.d/mysql restart /etc/init.d/redis-server start /etc/init.d/elasticsearch start /bin/bash

O bien, no use /etc/init.d/mysql start , en su lugar invoque mysqld directamente

 #!/bin/bash mysqld & /etc/init.d/redis-server start /etc/init.d/elasticsearch start /bin/bash

Además, aunque crear un grupo [mysqld] más en my.cnf no es un problema, debe agregar una nueva configuración al grupo existente:

 RUN sed -i '/\[mysqld\]/a skip-grant-tables' /etc/mysql/my.cnf

Consulte el documento para conocer varias formas de iniciar/detener el servidor Mysql

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda