Estoy tratando de implementar mi aplicación de nodo js con la ventana acoplable, pero cuando estoy ejecutando la ventana acoplable, la compongo y da un error al final. Vi alguna solución como
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
, pero dónde especificar esta consulta en la ventana acoplable.
docker-compose.yml
version: '3' services: db: build: context: . dockerfile: ./docker/Dockerfile-mysql container_name: mydb environment: - MYSQL_ALLOW_EMPTY_PASSWORD=yes - MYSQL_DATABASE=dbautokab - MYSQL_USER=root - MYSQL_PASSWORD= networks: - helicopter-network healthcheck: test: "exit 0" helicopter-api: build: context: . dockerfile: ./docker/Dockerfile-api depends_on: - db networks: ['helicopter-network'] environment: - PORT=3000 - DATABASE_HOST=db - DATABASE_PASSWORD= - EGG_SERVER_ENV=local - NODE_ENV=development ports: - "3000:3000" networks: helicopter-network: driver: bridge
Dockerfile-api
FROM node:10-slim USER node RUN mkdir -p /home/node/app WORKDIR /home/node/app COPY --chown=node package*.json ./ RUN npm install COPY --chown=node . . COPY wait-for-it.sh / ENV HOST=0.0.0.0 PORT=3000 EXPOSE ${PORT} CMD /wait-for-it.sh db:3306 -- npm start
Dockerfile-mysql
FROM mysql COPY ./docker/init_db.sql /docker-entrypoint-initdb.d/
init_db.sql
CREATE DATABASE IF NOT EXISTS dbautokab; GRANT ALL PRIVILEGES on dbautokab.* TO 'root'@'%' WITH GRANT OPTION;
error
error al conectarse a db: { Error: ER_NOT_SUPPORTED_AUTH_MODE: el cliente no admite el protocolo de autenticación solicitado por el servidor; considere actualizar el cliente MySQL
Creo que iniciar el servidor con un complemento de autenticación predeterminado personalizado debería funcionar. En este caso, puede anular la propiedad del command
en docker-compose.yml
.
# ... services: db: # ... command: --default-authentication-plugin=mysql_native_password # ...
Cuando usas:
DESDE mysql
Docker saca la última versión, en este caso (8.0) que no soporta tipo de autenticación
Puede especificar la etiqueta de versión en su Dockerfile como:
DESDE mysql:5.7.26
Si desea permanecer en Mysql 8.0.
Debe ejecutar esta línea de comando dentro del contenedor:
docker exec -it container_name mysql -u root -p [root-password] mysql -e "update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';"
O conéctese a su contenedor y ejecute el comando:
docker exec -it container_name /bin/bash mysql -u root -p [root-password] mysql -e "update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';"
Espero eso ayude