docker-compose의 env-file 및 MariaDB
MariaDB를 사용하여 Raspberry Pi 3B+에 다음 클라우드를 설정하려고 합니다. 대략 다음 예를 따릅니다.
내 작성 파일은 다음과 같습니다.
version: '3'
services:
db:
image: mariadb
env_file:
- pi.env
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- ${BASE_PATH}/db:/var/lib/mysql
nextcloud:
image: nextcloud:apache
env_file:
- pi.env
restart: always
ports:
- 80:80
- 443:443
volumes:
- ${BASE_PATH}/www:/var/www
depends_on:
- db
environment:
- MYSQL_HOST=db
다음은 pi.env 파일입니다.
MYSQL_PASSWORD=secure-password
MYSQL_ROOT_PASSWORD=even-more-secure.password
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
BASE_PATH=/tmp
실행 후docker-compose up
yaml과 env 파일이 있는 디렉토리에서 두 컨테이너는 정상적으로 시작됩니다.데이터베이스 컨테이너는 빈 암호만 허용하므로 데이터베이스 연결을 설정할 수 없습니다(컨테이너에서 셸을 팝업하여 실행).mysql -u nextcloud
암호를 입력하지 않으면 데이터베이스에 액세스할 수 있습니다.)그래도 $MYSQL_ROOT_PASSWORD 환경 변수는 컨테이너에서 올바르게 반향될 수 있습니다.
만약 내가 혼자 mariadb-image를 시작한다면,docker run -e MYSQL_ROOT_PASSWORD=secure-password
모든 것이 예상대로 작동합니다.
누가 나의 실수를 지적해 줄 수 있습니까?
얼마 전에 드디어 설정을 복구했습니다.슬프게도, 저는 더 이상 무엇이 속임수를 썼는지 재구성할 수 없습니다(그리고 저의 git commit 메시지는 제가 바라던 것만큼 미래의 자신에게 명확하지 않았습니다:D.
하지만 저는 도커 합성 대신 pi.env 파일에서 데이터베이스 암호에 대한 환경 변수를 단독으로 선언하는 것으로 보입니다.음, 저는 속임수를 썼습니다.
내 도커 작곡.음:
services:
db:
image: jsurf/rpi-mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
restart: always
volumes:
- db:/var/lib/mysql
env_file:
- pi.env
nextcloud:
image: nextcloud:apache
restart: always
container_name: nextcloud
volumes:
- www:/var/www/html
environment:
- VIRTUAL_HOST=${VIRTUAL_HOST}
- LETSENCRYPT_HOST=${VIRTUAL_HOST}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
- MYSQL_HOST=db
- NEXTCLOUD_TRUSTED_DOMAINS=${VIRTUAL_HOST}
- NEXTCLOUD_TRUSTED_DOMAINS=proxy
env_file:
- pi.env
depends_on:
- db
networks:
- proxy-tier
- default
pi.env:
MYSQL_PASSWORD=secure-password
MYSQL_ROOT_PASSWORD=even-more-secure.password
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
그래도 고마워요 @ 잔도린!
저는 이것이 매우 늦은 답변이라는 것을 알지만, 저는 전혀 관련이 없는 것을 검색하는 동안 이것을 우연히 발견했습니다.
내 기억이 맞다면, 당신은 도커 컴포지에게 ENV 변수를 환경에 선언하는 것만으로 실제로 도커로 보내라고 말해야 합니다.
environment:
- MYSQL_HOST=db
- MYSQL_PASSWORD
- MYSQL_USER
저는 도커 컴포지에서 .env-file을 선언한 적이 없기 때문에 아마 그것이 이미 그 문제를 해결했을 수도 있습니다.저는 이런 식으로 사용합니다(나는 .env 파일도 가지고 있고, 때때로 일부 값을 덮어씁니다).
개발자 MariaDB 컨테이너의 예:
environment:
- MYSQL_DATABASE=mydb
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD
언급URL : https://stackoverflow.com/questions/53921335/env-file-and-mariadb-in-docker-compose
'programing' 카테고리의 다른 글
Git는 왜 이 텍스트 파일을 이진 파일로 취급합니까? (0) | 2023.07.22 |
---|---|
응용 프로그램 인수를 기반으로 실행할 스프링 배치 작업 선택 방법 - 스프링 부트 Java 구성 (0) | 2023.07.22 |
MariaDB에서 트랜잭션을 만들어 IP 블랙리스트의 만료 시간을 설정합니다. (0) | 2023.07.22 |
스프링부츠 MVC 멀티모듈 실행가능항아리 (0) | 2023.07.22 |
기존 테이블에 인덱스 생성 Oracle (0) | 2023.07.22 |