我正在开发一个基于dunglas/symfony-docker模板的项目,我想在其中添加一个postgres数据库。
看来我的停靠器compose.yml文件配置错误,因为postgres之间的通信出现故障。实际上,当我尝试执行symfony迁移时,原则会返回以下错误:
用户"postgres“密码身份验证失败
当我检查PHP日志时,我注意到PHP正在数据库后面等待
php_1还在等db准备好..。或者数据库是不可触及的。
我的船坞
version: "3.4"
services:
php:
links:
- database
build:
context: .
target: symfony_php
args:
SYMFONY_VERSION: ${SYMFONY_VERSION:-}
SKELETON: ${SKELETON:-symfony/skeleton}
STABILITY: ${STABILITY:-stable}
restart: unless-stopped
volumes:
- php_socket:/var/run/php
healthcheck:
interval: 10s
timeout: 3s
retries: 3
start_period: 30s
environment:
# Run "composer require symfony/orm-pack" to install and configure Doctrine ORM
DATABASE_URL: ${DATABASE_URL}
# Run "composer require symfony/mercure-bundle" to install and configure the Mercure integration
MERCURE_URL: ${CADDY_MERCURE_URL:-http://caddy/.well-known/mercure}
MERCURE_PUBLIC_URL: https://${SERVER_NAME:-localhost}/.well-known/mercure
MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeMe!}
caddy:
build:
context: .
target: symfony_caddy
depends_on:
- php
environment:
SERVER_NAME: ${SERVER_NAME:-localhost, caddy:80}
MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeMe!}
MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeMe!}
restart: unless-stopped
volumes:
- php_socket:/var/run/php
- caddy_data:/data
- caddy_config:/config
ports:
# HTTP
- target: 80
published: 80
protocol: tcp
# HTTPS
- target: 443
published: 443
protocol: tcp
# HTTP/3
- target: 443
published: 443
protocol: udp
###> doctrine/doctrine-bundle ###
database:
image: postgres:${POSTGRES_VERSION:-13}-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
# You should definitely change the password in production
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-ChangeMe}
POSTGRES_USER: ${POSTGRES_USER:-symfony}
volumes:
- db-data:/var/lib/postgresql/data:rw
# You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
# - ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###
volumes:
php_socket:
caddy_data:
caddy_config:
###> doctrine/doctrine-bundle ###
db-data:
###< doctrine/doctrine-bundle ###提取我的.env文件:
POSTGRES_DB=proximityNL
POSTGRES_PASSWORD=postgres
POSTGRES_USER=postgres
DATABASE_URL="postgresql://postgres:postgres@database:5432/proximityNL?serverVersion=13&charset=utf8"你能帮我吗?
最诚挚的问候..。
更新:事实上,我在周六了解到,仅仅是有必要移除孤儿。
docker-compose down --remove-orphans --volumes发布于 2021-08-20 08:53:29
在容器中运行时,127.0.0.1引用容器本身。Docker创建了一个虚拟网络,每个容器都有自己的IP地址。您可以通过容器的服务名称来对其进行寻址。
所以您的连接字符串应该指向database:5432而不是127.0.0.1:5432,如下所示
DATABASE_URL="postgresql://postgres:postgres@database:5432/proximityNL?serverVersion=13&charset=utf8"您可以使用database,因为这是您的停靠器撰写文件中的postgresql容器的服务名称。
发布于 2021-08-20 08:56:37
在码头,你可以通过它的名字调用图像。
因此,请尝试为您的配置使用docker映像的名称。
DATABASE_URL="postgresql://postgres:postgres@database:5432/proximityNL?serverVersion=13&charset=utf8"还可以在php和数据库映像之间添加一个链接。
services:
php:
links:
- database这就是我将java应用程序与mysql db连接起来的方式。
发布于 2021-08-20 09:26:49
Docker应该将DNS解析从Docker主机映射到您的容器中。
组合链接中的网络化
正因为如此,DB看起来应该是:"postgresql://postgres:postgres@database:5432/...“
https://stackoverflow.com/questions/68859409
复制相似问题