连接到 postgresql 数据库

问题描述 投票:0回答:1

我正在尝试使用 traefik 在 docker swarm 中安装 dspace7.6 来管理我的容器,但我的问题是,当我访问 UI 的 url 时,我看不到数据出现(社区、集合、项目)。我已将此数据直接插入到我的数据库中。

这是我的 docker compose 文件,用于启动由 traefik 管理的后端服务。它工作正常,只是我无法显示 postgresql 数据库中的数据。我怀疑用于建立连接的环境变量的 url (db__P__url:) 未正确配置。您能否告诉我如何正确配置它以访问数据。 my_db_ip_adress 是 traefik-net 网络分配给我的 dspacedb 服务的 IP 地址。 感谢您的帮助。

docker-compose-rest.yml

version: '3.9'
volumes:
  assetstore:

networks:
  traefik-net:
    external: true
  dspace:
    driver: overlay
    external: true

services:
  # DSpace (backend) webapp container
  dspace:
    environment:
     
      dspace__P__dir: /dspace
      dspace__P__server__P__url: http://dspace-api.localhost/server
      dspace__P__ui__P__url: http://dspace.localhost
      dspace__P__name: 'DSpace Started with Docker Compose'
      # db.url: Ensure we are using the 'dspacedb' image for our database
      db__P__url: 'jdbc:postgresql://my_db_ip_adress:5432/dspace'
      # solr.server: Ensure we are using the 'dspacesolr' image for Solr
      solr__P__server: http://solr.localhost/solr
    
    image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-latest-test}"
    depends_on:
    - dspacedb
    networks:
      - traefik-net
      - dspace
    deploy:   
      labels:  
          - "traefik.enable=true"        
          - "traefik.http.routers.dspace.entrypoints=http"      
          - "traefik.http.routers.dspace.rule=Host(`dspace-api.localhost`)"   
          - "traefik.http.routers.dspace.service=dspace"  
          - "traefik.http.services.dspace.loadbalancer.server.port=8080"
      
    volumes:
      - assetstore:/dspace/assetstore
      - solr_configs:/dspace/solr
    entrypoint:
    - /bin/bash
    - '-c'
    - |
      while (!</dev/tcp/dspacedb/5432) > /dev/null 2>&1; do sleep 1; done;
      /dspace/bin/dspace database migrate
      catalina.sh run    
  dspacedb:
    environment:
      - PGDATA=/pgdata
      - POSTGRES_PASSWORD=dspace
    image: dspace/dspace-postgres-pgcrypto
    networks:
      - traefik-net
      - dspace
    deploy:
      labels:   
          - "traefik.enable=true"        
          - "traefik.tcp.routers.dspacedb.entrypoints=postgres"      
          - "traefik.tcp.routers.dspacedb.rule=HostSNI(`*`)"                             
          - "traefik.tcp.routers.dspacedb.tls=false"     
          - "traefik.tcp.routers.dspacedb.service=dspacedb"  
          - "traefik.tcp.services.dspacedb.loadbalancer.server.port=5432" 
    volumes:
      - /data/services/postgres/pgdata:/pgdata
  dspacesolr:
    image: solr:8.11-slim
    depends_on:
    - dspace
    networks:
      - traefik-net
      - dspace
    deploy:
      labels:
          - "traefik.enable=true"        
          - "traefik.http.routers.dspacesolr.entrypoints=http"      
          - "traefik.http.routers.dspacesolr.rule=Host(`solr.localhost`)"        
          - "traefik.http.routers.dspacesolr.service=dspacesolr"         
          - "traefik.http.services.dspacesolr.loadbalancer.server.port=8983"

    working_dir: /var/solr/data

    volumes:
      - solr_data:/var/solr/data
      
    entrypoint:
    - /bin/bash
    - '-c'
    - |
      init-var-solr
      precreate-core authority /opt/solr/server/solr/configsets/authority
      cp -r /opt/solr/server/solr/configsets/authority/* authority
      precreate-core oai /opt/solr/server/solr/configsets/oai
      cp -r /opt/solr/server/solr/configsets/oai/* oai
      precreate-core search /opt/solr/server/solr/configsets/search
      cp -r /opt/solr/server/solr/configsets/search/* search
      precreate-core statistics /opt/solr/server/solr/configsets/statistics
      cp -r /opt/solr/server/solr/configsets/statistics/* statistics
      exec solr -f
volumes:
  assetstore:
  pgdata:
  solr_data:
  solr_configs:
postgresql docker docker-swarm traefik dspace
1个回答
0
投票
  1. 我不知道你是如何完成 localhost 的事情 - 也许是本地安装 dnsmasq 或 ../hosts 条目?但您也可以利用 localtest.me 或 local.gd 等服务来达到相同的结果。例如

    foo.local.gd
    始终解析为 127.0.0.1

  2. Traefik 的 HostSNI 路由仅适用于 TLS 加密连接。我猜 dspacedb 上的 traefik 配置有太多噪音。

  3. 这是单节点群?我也没有看到任何以集群感知方式持久保存 dspacedb 数据的真正尝试?

  4. 问题的关键是:每次服务任务重新启动时,它都会获得新的IP。我猜你在配置中嵌入的 IP 是旧的。为什么不直接使用 docker 网状网络:Docker 将一个 dns 服务器附加到每个容器,该服务器知道它所附加的网络将按名称解析任何服务。由于您已将 dspace 和 dspacedb 连接到同一网络,因此此配置就足够了:

      db__P__url: 'jdbc:postgresql://dspacedb:5432/dspace'
© www.soinside.com 2019 - 2024. All rights reserved.