在 docker-compose 中连接 PostgreSQL 时出现问题

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

我正在尝试在 Docker 上创建一个 Laravel 项目,并在本地使用 PostgreSQL 数据库。我的项目的结构如下所述:

nginx
   conf.d
      default.conf

php
  Dockerfile

src
  Laravel Project

docker-compose-yml

我可以在 8080 端口上成功运行该项目,但在连接到 PostgreSQL 时遇到问题。 这是我的

docker-compose.yml
:

version: '3.8'

networks:
   laravel:

services:
   nginx:
     image: nginx:alpine
     command: nginx -g "daemon off;"
     container_name: nginx
     ports:
        - "8080:80"
     volumes:
        - ./src:/var/www
        - ./nginx/conf.d/:/etc/nginx/conf.d
     depends_on:
       - php
     networks:
       - laravel

  php:
    build:
      context: ./php
      dockerfile: Dockerfile 
    volumes:
      - ./src:/var/www
    ports:
      - "9000:9000"
    networks:
      - laravel

 db:
   container_name: postgres
   image: postgres
   environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=root
      - POSTGRES_HOST_AUTH_METHOD=trust
      - POSTGRES_DB=expense
   volumes:
      - ./postgres:/var/lib/postgresql/data"
   ports:
      - "5446:5432"
   restart: always
   networks:
      - laravel

如果您想知道,这里是 PHP 的 Dockerfile:

FROM php:8.0.3-fpm

RUN docker-php-ext-install pdo 

我还想提一下 Laravel 项目使用的

.env

DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=postgres

首先使用此配置,我运行了

docker-compose build
,运行
docker-compose up
后,我得到了以下 Postgres 结果: enter image description here

当我想要到达

127.0.0.1:5432
时,却没有任何东西可以向我展示。我该如何解决这个问题?

laravel postgresql docker docker-compose
2个回答
0
投票

在您的服务中

db
您的
POSTGRES_DB=expense
将默认数据库名称设置为
expense
doc
所以你的 .env 应该使用
DB_DATABASE=expense
而不是
postgres

我不确定的最后一件事(因为我找不到有关它的文档)是你的

DB_HOST
:我不知道你是否应该使用
container_name -> postgres
service_name -> db
,我认为它是service_name 所以 db 在你的情况下


0
投票

外部网络创建

sudo docker network create local_central_db_network

创建文件 docker-compose.yml

version: '3.3'

services:
  postgres:
    image: postgres:16.4 # Using PostgreSQL version 16.4
    container_name: local-central-db-pgsql-container-16.4
    restart: always
    ports:
      - "5432:5432" # Expose port 5432 for external access
    environment:
      POSTGRES_USER: root # Replace with your username
      POSTGRES_PASSWORD: root # Replace with your password
    volumes:
      - ./dbdata:/var/lib/postgresql/data # Persist data between restarts
    networks:
      - local_central_db_network

networks:
  local_central_db_network:
    external: true

命令:Docker:设置:运行这些命令

sudo docker-compose down
sudo docker-compose build && docker-compose up -d

使用命令行连接

docker exec -it local-central-db-pgsql-container-16.4 bash
psql -U root
\q

注意:在客户端/可视化软件中这样使用

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.