programing

MYSQL_ROOT_PASSWORD 환경변수가 mariadb 컨테이너에 설정되어 있지 않다.

firstcheck 2022. 9. 19. 21:36
반응형

MYSQL_ROOT_PASSWORD 환경변수가 mariadb 컨테이너에 설정되어 있지 않다.

도커 스톰을 사용하여 클러스터를 설정하려고 하면 다음 오류가 나타납니다.

$ docker logs 6ea0f7290cb0  
2020-11-30 10:46:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.5.8+maria~focal started.
2020-11-30 10:46:08+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-11-30 10:46:08+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.5.8+maria~focal started.
2020-11-30 10:46:08+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
        You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

이상한 점은 도커 컴포지트 툴을 사용하면 모든 것이 잘 작동하기 때문입니다.

이 문제를 재현하려면 , 다음의 순서에 따릅니다.

작성하다.env파일:

DB_NAME=nest
DB_USERNAME=nest
DB_PASSWORD=nest
DB_ROOT_PASSWORD=nest

작성하다docker-compose.yml파일:

version: '3.8'

services:

  db:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"

명령어를 사용하면docker-compose up -d모든 것이 정상적으로 동작하고 있는 것을 확인할 수 있습니다.docker-compose ps명령어:

$ docker-compose ps
    Name                  Command             State    Ports  
--------------------------------------------------------------
db-debug_db_1   docker-entrypoint.sh mysqld   Up      3306/tcp

명령어를 사용하면docker stack deploy -c docker-compose.yml db데이터베이스가 다음 명령어로 시작되지 않았는지 확인할 수 있습니다.docker service ls:

$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
ux1p4k6vwiyh        db_db               replicated          0/1                 mariadb:latest

docker-compose그리고.docker stack deploycompose.yml 파일을 해석하는 방법에는 여러 가지 차이가 있습니다.그 중 하나는 후자가 .env 파일을 자동으로 처리하지 않는다는 것입니다.(참조) 따라서 명시적으로 참조할 필요가 있습니다.

services:
  db:
    image: mariadb
    env_file: .env

언급URL : https://stackoverflow.com/questions/65072368/mysql-root-password-environment-variable-is-not-set-for-mariadb-container-if-i-u

반응형