我正在使用 docker 创建 postgresql 数据库。 不幸的是,安装指南对我来说不够详细,也许是因为我是 docker 新手,我可能会遗漏一些东西。
https://payloadcms.com/docs/product/deployment#docker
这是我的 docker-compose.yml:
version: '3'
services:
payload:
image: node:18-alpine
ports:
- '3000:3000'
volumes:
- .:/home/node/app
- node_modules:/home/node/app/node_modules
working_dir: /home/node/app/
command: sh -c "yarn install && yarn dev"
depends_on:
- mongo
- postgres
env_file:
- .env
mongo:
image: mongo:latest
ports:
- '27017:27017'
command:
- --storageEngine=wiredTiger
volumes:
- data:/data/db
logging:
driver: none
postgres:
image: postgres:latest
ports:
- '5432:5432'
environment:
POSTGRES_DB: ExperimentOne
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- pgdata:/var/lib/postgresql/data
logging:
driver: none
pgadmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: admin
ports:
- "5050:80"
depends_on:
- postgres
volumes:
data:
node_modules:
pgdata:
这是我的.env:
DATABASE_URI=postgres://user:[email protected]:5432/experimentOne
PAYLOAD_SECRET=1f9719d86d80cca708048d07
PAYLOAD_PUBLIC_SERVER_URL=http://localhost:3000
NEXT_PUBLIC_SERVER_URL=http://localhost:3000
我非常确定密码、用户名和 IP 地址是正确的,因为我使用相同的信息通过 pgadmin 连接到数据库。但是 docker 内部的 IP 地址并不总是相同的,所以上次我想连接到 pgadmin 时,我必须使用 docker inform [container_id] 检查 docker 中的 IP。
PAYLOAD_SECRET 可能是错误的,它是在有效负载设置期间生成的,我不知道它的作用,但我猜这不是问题。
如果我尝试打开: http://localhost:3000/admin 无法连接。 ns_error_connection_refused
[在此输入图片描述](https://i.sstatic.net/jtrr5sqF.png)
有什么想法吗?
我尝试将变量添加到.env。
我陷入困境,因为错误消息没有帮助。
将 DATABASE_URI 中的 IP 地址更改为 postgres,即 Docker 中的服务名称。更新为:
DATABASE_URI=postgres://user:password@postgres:5432/ExperimentOne
这样,Docker 在内部处理 IP 地址。
如果您不确定 PAYLOAD_SECRET,只需创建一个新的随机字符串并替换旧的。
另外,运行 docker-compose log payload 来查看尝试启动 Payload 服务时是否有任何错误消息。当您进行更改时,您可以执行以下操作:
docker-compose down
docker-compose up -d
最后确保您的计算机上没有其他任何东西正在使用端口 3000。如果一切设置正确,您应该能够通过 http://localhost:3000/admin 访问它