programing

도커가 MariaDB 비밀번호를 설정하지 않음

goodsources 2022. 12. 19. 21:29
반응형

도커가 MariaDB 비밀번호를 설정하지 않음

docker-compose.yml로

version: '3'
services:
  db:
    image: mariadb:latest
    volumes:
      - ./dc_test_db:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: secret

접속하는 방법:

sudo docker exec -it docker_db_1 mysql -u root -p 

로그인하려면 암호를 비워 두어야 합니다.뭐가 문제죠?

mariadb 버전 10.4에서 이 문제가 발생했는데, 버전 10.3으로 변경해서 수정되었습니다.하지만 이 문제에 대한 다른 이유가 있을 수 있습니다.

도커 아키텍처에서는 첫 번째 빌드 후 이미지는 불변합니다.즉, 도커 구성 파일에 정의된 로컬 변수를 변경하여 서비스를 다시 실행하거나 서비스를 다시 실행함으로써 빌드된 이미지의 초기 설정에 변화가 없습니다.이러한 변경을 적용하려면 이미지와 컨테이너를 빌드하고 서비스를 실행하는 단계를 다시 수행해야 합니다.그것은 다음과 같이 할 수 있다.

1. docker-compose stop (먼저 서비스를 중지합니다)

2. Docker-composure rm (그 후 관련된 모든 용기를 청소합니다)

3. Docker-compose-up --build -d (마지막으로 --build 옵션을 사용하여 서비스를 실행하여 새로 정의된 설정으로 이미지를 재구축합니다.)

이 단계를 수행하면 용기 내부에 저장된 모든 데이터가 지워집니다.

기존 db 데이터 디렉토리에서 mariadb 컨테이너를 시작하고 있는 것 같습니다.이것에 의해, 새로운 데이터베이스를 초기화하는 대신에 현재의 데이타베이스를 사용하게 됩니다.이 문제를 해결하려면 기존 mariadb 컨테이너를 삭제하고 현재 db 디렉토리 콘텐츠를 삭제한 후 도커 컴포트를 다시 실행할 것을 제안합니다.

$ docker-compose down -v
$ rm -Rf dc_test_db/*
$ docker-compose up -d

이는 컨테이너 자체 내부에서 클라이언트를 로컬로 사용하고 있기 때문입니다.로컬 연결에서 암호를 요구하지 않습니다.

호스트 컴퓨터에서 도커로 연결을 시도합니다.containerip:3306그 후 패스워드를 묻습니다.

MySQL 사용자는 요청을 보낸 사용자 이름과 호스트에 의해 정의됩니다.예를 들어, 3개의 다른 사용자가 있습니다. root@192.168.0.123,root@localhost및 와일드카드root@%.

도커 컴포지트 파일에서 MYSQL_ROOT_PASSWORD env를 설정하면 mariadb는 사용자의 비밀번호를 설정합니다.root@%, 사용자 비밀번호가 아닙니다.root@localhost.

하지만 당신이 mariadb의 비밀번호를 테스트하려고 할 때, 당신은sudo docker exec -it docker_db_1 mysql -u root -p명령어, 컨테이너 내의 mariadb-client가 사용자를 사용하는 것을 의미합니다.root@local사용자가 아닌 mariadb-server에 액세스하기 위해 (패스워드 없음)root@%(앞으로 설정한 패스워드가 있는 경우).

따라서 해당 사용자에 대해 설정한 비밀번호를 테스트하려면 다음 명령을 사용합니다.

docker run -it mariadb mysql -u root -h MARIADB-CONTAINER-IP -p

MARIADB-CONTERNER-IP는 mariadb 컨테이너의 IP 주소입니다.(도커 검사를 사용하여 컨테이너의 IP 주소를 확인합니다).감사해요.

MYSQL_ROOT_PASSWORD는 지정된 볼륨으로 컨테이너를 처음 실행할 때만 설정됩니다.

MYSQL_ROOT_PASSWORD를 사용하여 비밀번호를 설정하려면:

옵션 1: 오래된 DB 파일을 삭제하고 새로 시작합니다.

rm -rf ./dc_test_db

옵션 2: 명명된 볼륨 사용:

version: '3.5'
services:
 db:
  image: mariadb:latest
  volumes:
    - dc_test_db:/var/lib/mysql
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: secret
volumes:
  dc_test_db:

언급URL : https://stackoverflow.com/questions/61950105/docker-doesnt-set-mariadb-password

반응형