ER_HOST_NOT_PRIVILEGED - 도커 컨테이너가 mariadb에 연결하지 못함
mariadb와 node.js 이미지로 작업할 도커 컨테이너를 가져오려고 합니다.컨테이너는 다음 위치에서 기존 데이터베이스를 사용합니다./home/mysql
그러나 컨테이너가 실행되면 node.js에 다음과 같은 "failed to connect" 오류가 나타납니다.
Error: ER_HOST_NOT_PRIVILEGED:
Host '172.18.0.5' is not allowed to connect to this MariaDB server
docker-compose.yml은 다음과 같습니다.
version: '3'
services:
mariadb:
image: mariadb
restart: always
volumes:
- /home/mysql:/var/lib/mysql
user: "mysql"
ports:
- "3306:3306"
watch:
build: .
restart: always
links:
- mariadb:mysql
environment:
- DOCKER_IP=172.18.0.2
depends_on: ['mariadb']
ports:
- "3000:3000"
이 스레드를 읽은 후 mysql은 실제로 실행 중이지만 다른 서비스가 연결되도록 할 수 없습니다.
다음은 제가 확인한 몇 가지 단계입니다.보시는 것처럼 mysql 인스턴스에 로그인할 수 있습니다.
$ docker exec -it 552aae9ea09c bash
mysql@552aae9ea09c:/$ mysql -u root -p
Enter password: *******
MariaDB [(none)]> SELECT host, user FROM mysql.user;
+-------------+------------------+
| host | user |
+-------------+------------------+
| 127.0.0.1 | root |
| ::1 | root |
| someusername| |
| someusername| root |
| localhost | |
| localhost | dbusername |
| localhost | databasename |
| localhost | root |
+-------------+------------------+
8 rows in set (0.00 sec)
mysql@552aae9ea09c:/$ mysqld --verbose --help | grep bind-address
2017-11-13 17:35:40 139825857279872 [Note] Plugin 'FEEDBACK' is disabled.
--bind-address=name IP address to bind to.
bind-address (No default value)
한 가지 주의할 점은 사용자가 명시적으로 를 사용하도록 설정했는데도mysql
yml 파일에는 /home/http:/http:/home/https:ib_logfile0
,ib_logfile1
,ib_buffer_pool
아직 의 그룹에 속해 있다systemd-journal-remote
접속 장애와 관련이 있을 것으로 생각됩니다.(참조)
사용자가 수신하는 오류는 MariaDB가 사용자가 서버에 접속할 권한이 없다고 생각하기 때문에 발생합니다.즉, Node.js 앱에 대한 데이터베이스 사용자를 생성하지 않았거나 해당 사용자에 대한 허가가 올바르지 않습니다.
이 문제를 해결하는 가장 확실한 방법은 Node.js 응용 프로그램에 대해 별도의 사용자를 만드는 것입니다.다음 SQL을 파일에 쓰고 볼륨을 다음 위치에 마운트하면 이 작업을 자동화할 수 있습니다./docker-entrypoint-initdb.d
.
CREATE USER 'my-app-user'@'%' IDENTIFIED BY 'my-app-password';
GRANT ALL ON *.* TO 'my-app-user'@'%';
이에 따라 사용자 이름과 비밀번호를 변경하고 지정된 권한을 에서 줄입니다.ALL
특권와일드카드 호스트명을 변경할 수도 있습니다.%
특정 IP 주소 또는 호스트명으로 이동합니다.
다음 SQL 쿼리를 실행합니다.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'
(루트 사용자로서 접속하고 있는 것을 확인합니다).
언급URL : https://stackoverflow.com/questions/47270505/er-host-not-privileged-docker-container-fails-to-connect-to-mariadb
'programing' 카테고리의 다른 글
MySQL 필드에서 선행 및 후행 공백을 제거하려면 어떻게 해야 합니까? (0) | 2022.10.03 |
---|---|
mysqldump에서 플로트 번호를 삽입하는 방법 (0) | 2022.10.03 |
다른 테이블에서 한 값을 선택한 경우 (0) | 2022.10.03 |
레지스트리 키를 여는 동안 Java 오류 발생 (0) | 2022.10.03 |
MySQL "외부 키 제약 조건이 완전히 형성되었습니다" (0) | 2022.10.03 |