База данных не сохраняется в докере после завершения работы с докером

#postgresql #docker #cyber-ark

Вопрос:

Я пытаюсь настроить решение cyberark conjur, используя контейнеры docker и локальный том для хранения постоянных данных. Я следовал инструкциям по следующей ссылке: https://github.com/cyberark/conjur-quickstart

Что я испытываю, так это то, что, когда я выполняю «docker-compose down», а затем возвращаю его обратно, он начинается с пустой системы, в которой ничего не сохранено.

Вот файл docker-compose.yml, с которым я работаю:

 version: '3'  
services:    
  openssl:  
    image: cyberark/conjur  
    container_name: openssl  
    entrypoint:  
     - openssl  
     - req  
     - -newkey  
     - rsa:2048  
     - -days  
     - "365"  
     - -nodes  
     - -x509  
     - -config  
     - /tmp/conf/tls.conf  
     - -extensions  
     - v3_ca  
     - -keyout  
     - /tmp/conf/nginx.key  
     - -out  
     - /tmp/conf/nginx.crt  
    volumes:  
     - ./conf/tls/:/tmp/conf  

  bot_app:  
    image: cfmanteiga/alpine-bash-curl-jq  
    privileged: true  
    container_name: bot_app  
    command: tail -F anything  
    volumes:  
    - ./program.sh:/tmp/program.sh  
    restart: on-failure  
  
  database:  
    image: postgres:10.16  
    container_name: postgres_database  
    environment:  
      POSTGRES_HOST_AUTH_METHOD: trust  
    ports:  
      - 8432:5432  
    volumes:  
      - /share/Container/docker/conjur:/var/lib/postgresql/data  
  
  pgadmin:  
#    [https]://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html  
    image: dpage/pgadmin4  
    environment:  
      PGADMIN_DEFAULT_EMAIL: user@domain.com  
      PGADMIN_DEFAULT_PASSWORD: SuperSecret  
    ports:  
      - 18081:80  
  
  conjur:  
    image: cyberark/conjur  
    container_name: conjur_server  
    command: server  
    environment:  
      DATABASE_URL: postgres://postgres@database/postgres  
      CONJUR_DATA_KEY:  
      CONJUR_AUTHENTICATORS:  
    depends_on:  
    - database  
    restart: on-failure  
    ports:  
      - 18080:80  
  
  proxy:  
    image: nginx:1.13.6-alpine  
    container_name: nginx_proxy  
    ports:  
      - "8443:443"  
    volumes:  
      - ./conf/:/etc/nginx/conf.d/:ro  
      - ./conf/tls/:/etc/nginx/tls/:ro  
    depends_on:  
    - conjur  
    - openssl  
    restart: on-failure  
  
  client:  
    image: cyberark/conjur-cli:5  
    container_name: conjur_client  
    depends_on: [ proxy ]  
    entrypoint: sleep  
    command: infinity  
    volumes:  
    - ./conf/policy:/policy 
 

Я могу подтвердить, что данные записываются на локальный том хоста /общий ресурс/Контейнер/docker/conjur. Я протестировал, войдя в контейнер docker через «docker exec-it bash», зайдя в каталог /var/lib/postgresql/data и коснувшись test.txt файл. Затем я подтвердил, что на локальном хост-томе, который test.txt файл там.

Но когда я захожу в веб-интерфейс pgadmin и смотрю на базы данных, которые я создал на предыдущих шагах, они больше не существуют, а также пароль администратора был установлен по умолчанию вместо того, на что я его изменил.

Есть какие-нибудь мысли?

Спасибо.

Ответ №1:

Похоже, с вашей базой данных нет никаких проблем. Похоже, ваше подключение к базе данных выполнено неправильно. Не могли бы вы попробовать это ?

  pgadmin:  
    image: dpage/pgadmin4  
    environment:  
      PGADMIN_DEFAULT_EMAIL: user@domain.com  
      PGADMIN_DEFAULT_PASSWORD: SuperSecret  
      PGADMIN_CONFIG_SERVER_MODE: 'False'
    links:
      - database
    volumes:
       - pgadmin:/root/.pgadmin
    ports:  
      - 18081:80  
 

Комментарии:

1. Я попробовал это, и, похоже, это заставило контейнер для заклинаний остановиться. Попытался понять, почему используются журналы docker, и все, что в них написано : 2021-05-24T20:15:56.869858903 Z запись нового закрытого ключа в «/tmp/conf/nginx.ключ»

2. Таким образом, ваша проблема, похоже, исходит из Nginx.conf. Не могли бы вы создать пример только с вашей базой данных и Pgadmin, чтобы проверить, все ли идет хорошо.

3. Если все пойдет хорошо, вы можете закрыть эту проблему и открыть другую на основе nginx.conf

Ответ №2:

Если вы хотите, чтобы данные базы данных сохранялись, вам необходимо использовать том в Docker. Это потребует, чтобы вы ссылались на том в своем docker-compose.yml файле и использовали его в database определении:

 version: '3'  
services:    
  openssl:  
    image: cyberark/conjur  
    container_name: openssl  
    entrypoint:  
     - openssl  
     - req  
     - -newkey  
     - rsa:2048  
     - -days  
     - "365"  
     - -nodes  
     - -x509  
     - -config  
     - /tmp/conf/tls.conf  
     - -extensions  
     - v3_ca  
     - -keyout  
     - /tmp/conf/nginx.key  
     - -out  
     - /tmp/conf/nginx.crt  
    volumes:  
     - ./conf/tls/:/tmp/conf  

  bot_app:  
    image: cfmanteiga/alpine-bash-curl-jq  
    privileged: true  
    container_name: bot_app  
    command: tail -F anything  
    volumes:  
    - ./program.sh:/tmp/program.sh  
    restart: on-failure  
  
  database:  
    image: postgres:10.16  
    container_name: postgres_database  
    environment:  
      POSTGRES_HOST_AUTH_METHOD: trust  
    ports:  
      - 8432:5432  
    volumes:  
      - database:/var/lib/postgresql/data  
  
  pgadmin:  
#    [https]://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html  
    image: dpage/pgadmin4  
    environment:  
      PGADMIN_DEFAULT_EMAIL: user@domain.com  
      PGADMIN_DEFAULT_PASSWORD: SuperSecret
    links:
      - database
    depends_on:
      - database
    ports:  
      - 18081:80  
  
  conjur:  
    image: cyberark/conjur  
    container_name: conjur_server  
    command: server  
    environment:  
      DATABASE_URL: postgres://postgres@database/postgres  
      CONJUR_DATA_KEY:  
      CONJUR_AUTHENTICATORS:  
    depends_on:  
    - database  
    restart: on-failure  
    ports:  
      - 18080:80  
  
  proxy:  
    image: nginx:1.13.6-alpine  
    container_name: nginx_proxy  
    ports:  
      - "8443:443"  
    volumes:  
      - ./conf/:/etc/nginx/conf.d/:ro  
      - ./conf/tls/:/etc/nginx/tls/:ro  
    depends_on:  
    - conjur  
    - openssl  
    restart: on-failure  
  
  client:  
    image: cyberark/conjur-cli:5  
    container_name: conjur_client  
    depends_on: [ proxy ]  
    entrypoint: sleep  
    command: infinity  
    volumes:  
    - ./conf/policy:/policy

volumes:
  database: