Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme beim Zugriff auf Postgresql im Dockercontainer

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme beim Zugriff auf Postgresql im Dockercontainer

    Hallo

    Ich möchte eine Anwendung mit Docker realisieren. Dazu habe ich folgende Container:
    • nginx
    • php
    • postgresql
    • nodejs

    Grundsätzlich funktioniert alles bis auf den Zugriff vom Webserver auf Postgresql. Es kommt immer die Meldung, dass der Postgresqlserver nicht gefunden wird. Per DBeaver, wlcher lokal läuft, kann ich aber auf Postgresql zugreifen. Meine Recherchen im Internet haben ergeben, dass der containerübergreifende Zugriff auf Postgres etwas schwierig ist. Ich habe aber bis jetzt keine Lösung dazu gefunden.

    Hat jemand Erfahrung mit dieser Konstellation und kann mir sagen wo ich den Hebel ansetzen muss?

    docker-compose.yml
    Code:
     version: "3.9"
      services:
    nginx_api-p49153:
    image: nginx:latest
    ports:
    - ${PORT_HOST_HTTP}:80
    volumes:
    - ${DATADIR_API}:/var/www/html
    - ./.docker/conf/nginx/default.conf:/etc/nginx/conf.d/default.conf
    restart: always
    depends_on:
    - postgresql-p49152
    - php
    profiles:
    - api
    - all
    # networks:
    # - app-network
    php:
    build: .docker/build/php
    restart: always
    volumes:
    - ./.docker/conf/php/php.ini:/usr/local/etc/php/conf.d/php.ini
    # - ./.docker/conf/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
    - ${DATADIR_API}:/var/www/html
    profiles:
    - api
    - all
    # networks:
    # - app-network
    composer:
    image: composer
    volumes:
    - ${DATADIR_API}:/app
    command: install
    profiles:
    - api
    - all
    postgresql-p49152:
    image: postgres:15.2-alpine
    ports:
    - ${PORT_HOST_DB}:5432
    environment:
    - POSTGRES_DB=${DB_NAME}
    - POSTGRES_USER=${DB_USER}
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    volumes:
    - ${DATADIR_POSTGRES}:/var/lib/postgresql/data
    - ${DATADIR_POSTGRES_BACKUP}:/mnt
    # - ./.docker/conf/postgres/:/docker-entrypoint-initdb.d/
    restart: always
    profiles:
    - db
    - api
    - all
    # networks:
    # - app-network
    nodejs_ui-p49154:
    image: node:18-alpine
    command: sh -c "npm install && npm run dev"
    # ports:
    # - ${PORT_HOST_UI}:8080
    working_dir: /app
    volumes:
    - ./data/ui:/app
    depends_on:
    - nginx_api-p49153
    profiles:
    - all
    - ui
    # networks:
    # - app-network
    #networks:
    # app-network:

    nginx default.conf
    Code:
     # Nginx configuration
     
    server {
      listen 80 default_server;
      listen [::]:80 default_server;
      server_name localhost;
        root /var/www/html/public;
        location / {
      # try to serve file directly, fallback to index.php
      try_files $uri /index.php$is_args$args;
      }
        location ~ ^/index\.php(/|$) {
      fastcgi_pass php:9000;
      fastcgi_split_path_info ^(.+\.php)(/.*)$;
      include fastcgi_params;
        # optionally set the value of the environment variables used in the application
      # fastcgi_param APP_ENV prod;
      # fastcgi_param APP_SECRET <app-secret-id>;
      # fastcgi_param DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name";
        # When you are using symlinks to link the document root to the
      # current version of your application, you should pass the real
      # application path instead of the path to the symlink to PHP
      # FPM.
      # Otherwise, PHP's OPcache may not properly detect changes to
      # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
      # for more information).
      fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
      fastcgi_param DOCUMENT_ROOT $realpath_root;
      # Prevents URIs that include the front controller. This will 404:
      # http://domain.tld/index.php/some-path
      # Remove the internal directive to allow URIs like this
      internal;
      }
        # return 404 for all other php files not matching the front controller
      # this prevents access to other php files you don't want to be accessible.
      location ~ \.php$ {
      return 404;
      }
     
    error_log /var/log/nginx/project_error.log;
      access_log /var/log/nginx/project_access.log;
      }

  • #2
    Ich habe den Fehler gefunden. Einerseits habe ich beim Zugrif von Container zu Container immer den Hostport verwendet - welcher anders ist als der interne. Andereseits musste ich in der docker-composer.yml beim Service des Postgresql Servers den internen Port für die anderen Container mit expose freigeben.

    Code:
     postgresql-p49152:
      image: postgres:15.2-alpine
      container_name: db_pgsql
      ports:
      - ${PORT_HOST_DB}:5432
      expose:
      - 5432
     ...

    Kommentar

    Lädt...
    X