我正在尝试在 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 结果:
当我想要到达
127.0.0.1:5432
时,却没有任何东西可以向我展示。我该如何解决这个问题?
在您的服务中
db
您的POSTGRES_DB=expense
将默认数据库名称设置为expense
(doc)DB_DATABASE=expense
而不是 postgres
我不确定的最后一件事(因为我找不到有关它的文档)是你的
DB_HOST
:我不知道你是否应该使用container_name -> postgres
或service_name -> db
,我认为它是service_name 所以 db 在你的情况下
sudo docker network create local_central_db_network
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
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
注意:在客户端/可视化软件中这样使用