source

도커 구성:데이터베이스가 초기화되지 않았습니다.

ittop 2023. 8. 30. 22:04
반응형

도커 구성:데이터베이스가 초기화되지 않았습니다.

Docker-compose 및 mysql에 문제가 있습니다.

도커-docker.yml

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD:

   app:
    depends_on:
      - db
    image: eboraas/apache-php
    links:
      - db
    ports:
      - "80:80"
    volumes:
      - ./sito/:/var/www/html/

이 컨테이너를 작성하는 동안 오류가 발생했습니다.

Recreating phpapp_phpapache_1
Attaching to phpapp_db_1, phpapp_phpapache_1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
phpapache_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.30.0.3. Set the 'ServerName' directive globally to suppress this message
phpapp_db_1 exited with code 1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified

하지만 데이터베이스에 암호가 없습니다.어떻게 해결해야 하나요?

제가 지적하고 싶은 것이 있는데요, 만약 사용한다면요.docker rundocker-discovery가 아닌 terminal에서 명령을 실행하면 다음과 같은 명령이 명령어는 다음과 같습니다.

docker run -e MYSQL_ROOT_PASSWORD=password mysql_image

당신이 그것을 넣는다면 작동하지 않을 것이라는 것을 알아두세요.-e MYSQL_ROOT_PASSWORD=password끝나고mysql_image

문서에 따르면, 대신에MYSQL_ROOT_PASSWORD:- 및 = 사용해야 하며 '암호'를 사용해야 합니다. 결과는 다음과 같습니다.

- MYSQL_ROOT_PASSWORD=some_password

예를 들어, 다음과 같습니다.

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=some_password

다음에 대한 값을 지정하지 않으면 문제가 나타납니다.MYSQL_ROOT_PASSWORD(아래에 설명된 다른 경우).

다음 구문 중 하나를 사용할 수 있습니다.

# syntax 1
environment:
  MYSQL_ROOT_PASSWORD: strongrootpassword
# syntax 2
environment:
 - MYSQL_ROOT_PASSWORD=strongrootpassword

빈 암호/빈 암호를 사용하려면 다음을 사용합니다.

MYSQL_ALLOW_EMPTY_PASSWORD=1

암호를 임의로 설정하려면 다음을 사용합니다.

MYSQL_RANDOM_ROOT_PASSWORD=1

그런 다음 다음 다음을 사용하여 생성된 암호를 얻을 수 있습니다.

docker logs container_name_or_id 

결국 다음 중 하나를 지정해야 합니다.MYSQL_ROOT_PASSWORD,MYSQL_ALLOW_EMPTY_PASSWORD그리고.MYSQL_RANDOM_ROOT_PASSWORDMySQL 이미지의 진입점에 따라:

  • -z변수가 비어 있지 않은지 확인하는 것입니다.
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
    echo >&2 'error: database is uninitialized and password option is not specified '
    echo >&2 '  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
    exit 1
fi

당신이 그것을 설정하는 것처럼 보입니다.MYSQL_ROOT_PASSWORD아무 것도 아닌설명서에 따라 필요합니다.

https://hub.docker.com/_/mysql/

MYSQL_ROOT_PASSWORD

이 변수는 필수 항목이며 MySQL 루트 슈퍼 사용자 계정에 설정할 암호를 지정합니다.

우리는 사용할 수 있습니다.

docker container run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=password mysql

이름과 비밀번호를 지정할 수 있습니다.

나 같은 사람이 여기 올 경우를 대비해서요.

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

여기서 쉬세요. https://hub.docker.com/_/mysql

또한 php 앱을 시작하기 전에 DB를 사용할 수 있는지 확인하기 위해 상태 점검을 추가할 수 있습니다.

db:
image: mysql
container_name: ${MYSQL_SERVER_NAME}
ports:
    - "${MYSQL_LOCALPORT}:${MYSQL_PORT}"
environment:
    - "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}"
    - "MYSQL_USER=${MYSQL_USER}"
    - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
healthcheck:
        test: ["CMD", "mysqladmin" ,"ping", "-h", "${MYSQL_SERVER_NAME}"]
        timeout: 10s
        retries: 10
restart: always

앱에 추가합니다.

    depends_on: 
    db:
        condition: service_healthy

언급한 것처럼, 실제 값을 할당합니다.MYSQL_ROOT_PASSWORD항목environment부분.이전에 사용한 예에 대한 참조는 다음을 참조하십시오.

https://github.com/alexmacarthur/local-docker-db/blob/master/mysql/docker-compose.yml#L12

암호를 저장하지 않으려면docker-compose.yml파일, 당신은 또한 a를 통과할 수 있습니다..env값을 포함하는 파일을 저장한 다음 해당 파일을 repo에서 무시합니다.다음은 DyanmoDB를 사용하는 방법의 예입니다(같은 개념이지만).

https://github.com/alexmacarthur/local-docker-db/blob/master/dynamo/docker-compose.yml#L17

아래와 같이 비밀번호를 지정하면 마법처럼 작동합니다.기존 사용자를 사용해야 할지 말아야 할지 모르겠습니다.
MYSQL_PASSWORD:1 MYSQL_PASSWORD: 1 MYSQL_PASSWORD: 1 MYSQL_PASSWORD: 1 MYSQL_PASSWORD: 1

언급URL : https://stackoverflow.com/questions/39678463/docker-compose-database-is-uninitialized

반응형