programing

MariaDB 도커 컨테이너에 호스트의 암호가 필요하지 않고 컨테이너 내부의 암호가 필요한 이유는 무엇입니까?

coolbiz 2023. 7. 9. 22:00
반응형

MariaDB 도커 컨테이너에 호스트의 암호가 필요하지 않고 컨테이너 내부의 암호가 필요한 이유는 무엇입니까?

도커 합성 파일을 사용하여 스핀업한 MariaDB Container(10.9 최신 이미지)에서 매우 이상한 현상이 발생합니다.

컨테이너가 모두 작동합니다. 컨테이너의 셸에 액세스하면 mysql -u root -p를 실행하고 암호를 사용하여 mysql에 액세스할 수 있습니다.

포트 3306을 M2 Mac에 패치하고 mysql -h 127.0.0.1 -u root -p와 동일한 암호를 시도하면 "root@'localhost'에 대한 액세스 거부" 메시지가 표시됩니다.

그러나 암호 필드를 공백으로 두면 연결됩니다.그런데 왜 그러는지 모르겠어요!저는 빈 pwd가 있는 root@'%'와 같은 것일 수 있다고 생각했지만, 같은 비밀번호로 설정해 보았습니다.그러나 어느 쪽이든 액세스 거부 메시지에 root@'%'를 사용하고 있다고 표시될 것으로 예상됩니다.

이미지를 재구축하고 볼륨을 삭제해 보았습니다.MYSQL_PWD 주변의 github 문제가 비어 있는 것을 발견했기 때문에 적절한 측정을 위해 추가했지만 여전히 제대로 작동하지 않습니다.

db: 
  image: mariadb:latest
  environment:
    MYSQL_ROOT_PASSWORD: password
    MYSQL_DATABASE: dev_db
    MYSQL_USER: user
    MYSQL_PASSWORD: password
    MYSQL_PWD: password
  ports:
    - "3306:3306"
  volumes:
    - data-volume:/var/lib/mysql

이전에 이 문제를 발견한 적이 있거나 해결 방법을 제안한 사람이 있습니까?root@'localhost'가 두 개의 다른 자격 증명으로 구성된 것과 같습니다.

컨테이너 내에서 mysql/mariadb에 연결하면 해당 인스턴스는 사용자를 'localhost'에서 가져온 것으로 보지 않습니다.테스트 방법은 아래를 참조하십시오.따라서 'root'@'localhost'라는 오류가 표시되는 경우 이는 컨테이너 내부가 아닌 호스트에서 실행 중인 프로세스에 연결하기 때문입니다.

테스트 컨테이너 실행

docker run -d --rm --name testmariadb -P \
  -e MYSQL_RANDOM_ROOT_PASSWORD=true \
  mariadb:latest

포트를 확인합니다.

export MARIADB_PORT=$(docker inspect testmariadb --format='{{range $k, $v := .NetworkSettings.Ports}}{{with index $v 0}}{{.HostPort}}{{end}}{{end}}')

echo Container running on port ${MARIADB_PORT}

연결을 시도하고 오류를 확인합니다.

mysql -h127.0.0.1 -P${MARIADB_PORT} -uroot

다음과 유사한 내용이 표시됩니다.

ERROR 1045 (28000): Access denied for user 'root'@'172.17.0.1' (using password: NO)

정리하다

docker container rm -f testmariadb

언급URL : https://stackoverflow.com/questions/73725286/why-does-mariadb-docker-container-not-require-a-password-from-the-host-but-does

반응형