【问题标题】:Database's not persistent in docker after docker-compose downdocker-compose down 后,数据库在 docker 中不持久
【发布时间】:2021-05-24 01:48:15
【问题描述】:

我正在尝试使用 docker 容器和本地卷设置 Cyber​​ark 的 conjur 解决方案,以维护持久数据。我按照以下链接中的说明进行操作: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 

我可以确认数据正在写入本地主机卷 /share/Container/docker/conjur。我通过“docker exec -it bash”登录到 docker 容器并进入 /var/lib/postgresql/data 目录并触摸 test.txt 文件进行了测试。然后我确认在本地主机卷上有 test.txt 文件。

但是当我登录到 pgadmin Web 界面并查看我在前面步骤中创建的数据库时,它们不再存在,并且管理员密码已设置为默认值,而不是我更改的密码。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: postgresql docker cyber-ark


    【解决方案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  
    

    【讨论】:

    • 我试过这个,它似乎导致 conjur 容器停止。试图看看为什么使用 docker logs 和它所说的所有内容:2021-05-24T20:15:56.869858903Z 将新的私钥写入'/tmp/conf/nginx.key'
    • 所以您的问题似乎来自 Nginx.conf。你能用你的数据库和 Pgadmin 创建一个例子来检查它是否顺利吗?
    • 如果一切顺利你可以关闭这个issue,然后根据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:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2021-09-06
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多