programing

docker-compose의 env-file 및 MariaDB

topblog 2023. 7. 22. 09:08
반응형

docker-compose의 env-file 및 MariaDB

MariaDB를 사용하여 Raspberry Pi 3B+에 다음 클라우드를 설정하려고 합니다. 대략 다음 예를 따릅니다.

https://github.com/nextcloud/docker/blob/master/ .http/syser-discp/with-nginx-discp/sysadb/syscp/syscp.yml

내 작성 파일은 다음과 같습니다.

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 upyaml과 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

반응형