Maria DB 도커 액세스가 사용자 'root'@'localhost'에 대해 거부되었습니다.
MariaDB 도커 이미지를 사용하고 있는데 경고 메시지가 계속 표시됩니다.
[Warning] Access denied for user 'root'@'localhost' (using password: NO)
이미지 작성에 사용되는 도커 파일입니다.
FROM mariadb:10.6.4
ENV MYSQL_ROOT_PASSWORD pw
ENV MARIADB_DATABASE db1
ENV MARIADB_USER user1
ENV MARIADB_PASSWORD user1pw
컨테이너를 docker-composure로 시작합니다.
mariadb:
restart: always
image: mariadb_image
container_name: mariadb_container
build: topcat_mariadb/.
ports:
- 2306:3306
그리고 다음 방법으로 다른 컨테이너에서 컨테이너에 액세스합니다.
mysql+pymysql://user1:user1pw@mariadb_container:3306/db1
구글이 찾은 솔루션 대부분은 SQL 문 같은 것을 실행하고 있었지만 도커 컨테이너를 실행하고 있기 때문에 일시적인 솔루션이 필요합니다.도커에서 이걸 어떻게 고칠지 아는 사람?
----- EDIT-----
상태 체크 섹션을 도커 컴포지트 파일에 추가하는 것을 잊었습니다.
mariadb:
restart: always
image: mariadb_image
container_name: mariadb_container
build: topcat_mariadb/.
ports:
- 2306:3306
healthcheck:
test: ["CMD-SHELL", 'mysqladmin ping']
interval: 10s
timeout: 2s
retries: 10
갱신하다
질문의 업데이트를 기반으로 다음 명령을 실행하려고 합니다.mysqladmin ping
명령어를 입력합니다. mysqladmin
접속을 시도하고 있습니다.root
사용자이지만 데이터베이스 서버에 대해 인증하려면 암호가 필요합니다.
패스워드를 지정할 수 있습니다.mysqladmin
기준:
- 사용방법
-p
명령줄 옵션 - 사용방법
MYSQL_PWD
환경 변수 - 인증 정보 파일 생성
루트 패스워드를 이미지에서 이동시키고 대신 실행 시 설정해당 패스워드를 기입할 수 있습니다.docker-compose.yml
다음과 같은 파일:
version: "3"
services:
mariadb:
restart: always
image: mariadb_image
container_name: mariadb_container
build: topcat_mariadb/.
environment:
- "MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD"
- "MYSQL_PWD=$MYSQL_ROOT_PASSWORD"
healthcheck:
test: ["CMD-SHELL", 'mysqladmin ping']
interval: 10s
timeout: 2s
retries: 10
그리고 우리 안에.env
설정할 수 있는 파일:
MYSQL_ROOT_PASSWORD=pw1
이제 컨테이너가 시작된 후 컨테이너가 정상인지 확인합니다.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1c9c9f787e6 mariadb_image "docker-entrypoint.s…" 28 seconds ago Up 27 seconds (healthy) 3306/tcp mariadb_container
참고로 이 예에서는 커스텀이미지를 빌드하는 이유를 명확하게 알 수 없습니다.환경변수는 "빌드인" credential로 작성하는 것보다 런타임에 설정하는 것이 좋습니다.
이전 답변
사용 시 문제를 재현할 수 없습니다.mysql
클라이언트 코드 또는 Python 코드.이하에 기재되어 있는 경우docker-compose.yml
:
version: "3"
services:
mariadb:
restart: always
image: mariadb_image
container_name: mariadb_container
build: topcat_mariadb/.
shell:
image: mariadb:10.6.4
command: sleep inf
(디렉토리)topcat_mariadb
를 포함합니다.Dockerfile
문의해 주세요.)
만약 내가 실행 시shell
컨테이너:
docker-compose exec shell bash
그리고 달려라mysql
다음과 같습니다.
mysql -h mariadb_container -u user1 -p db1
동작은 양호합니다.
root@4fad8e8435df:/# mysql -h mariadb_container -u user1 -p db1
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.6.4-MariaDB-1:10.6.4+maria~focal mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [db1]>
sqlalchemy를 사용하고 있는 것 같습니다.Python 컨테이너를 믹스에 추가하는 경우:
version: "3"
services:
mariadb:
restart: always
image: mariadb_image
container_name: mariadb_container
build: topcat_mariadb/.
shell:
image: mariadb:10.6.4
command: sleep inf
python:
image: python:3.9
command: sleep inf
그런 다음 다음 Python 코드를 실행합니다.python
컨테이너:
>>> import sqlalchemy
>>> e = sqlalchemy.engine.create_engine('mysql+pymysql://user1:user1pw@mariadb_container:3306/db1')
>>> res = e.execute('select 1')
>>> res.fetchall()
[(1,)]
또, 문제없이 동작하고 있는 것 같습니다.
언급URL : https://stackoverflow.com/questions/69708629/maria-db-docker-access-denied-for-user-rootlocalhost
'programing' 카테고리의 다른 글
PHP에서 진행률 표시줄 업로드 (0) | 2022.10.10 |
---|---|
Laravel 요구::all()을 스태틱하게 호출하지 말 것 (0) | 2022.10.10 |
심플한 Java 인메모리 캐시를 찾고 있다 (0) | 2022.10.10 |
phpMyAdmin을 통해 원격 사용자 허용 (0) | 2022.10.10 |
특정 테이블의 MySQL 엔진 유형을 확인하려면 어떻게 해야 합니까? (0) | 2022.10.10 |