도커 구성:데이터베이스가 초기화되지 않았습니다.
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 run
docker-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_PASSWORD
MySQL 이미지의 진입점에 따라:
-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
'source' 카테고리의 다른 글
원격 없이 모든 로컬 분기 나열 (0) | 2023.08.30 |
---|---|
SQL Server 데이터베이스에서 복구 보류 중 상태를 수정하는 방법은 무엇입니까? (0) | 2023.08.30 |
mysql 조인 쿼리에서 동적 열 이름 사용 (0) | 2023.08.30 |
동일한 DBMS의 "외부" 데이터베이스에 연결 (0) | 2023.08.30 |
다크 그레이가 그레이보다 가벼운 이유는 무엇입니까? (0) | 2023.08.30 |