当前正在构建一个软件包,以使用AWS测试一些devOps配置。使用Swift Vapor3,PostgreSQL 11,Docker构建应用程序。鉴于我的github Repo,只要vapor build
vapor test
vapor run
您在本地安装了postgresql并安装了一个,该项目的构建/测试/运行就可以了username: test, password: test
但是我的api没有连接到数据库,并且担心我的配置错误。
version: "3.5"
services:
api:
container_name: vapor_it_container
build:
context: .
dockerfile: web.Dockerfile
image: api:dev
networks:
- vapor-it
environment:
POSTGRES_PASSWORD: 'test'
POSTGRES_DB: 'test'
POSTGRES_USER: 'test'
POSTGRES_HOST: db
POSTGRES_PORT: 5432
ports:
- 8080:8080
volumes:
- .:/app
working_dir: /app
stdin_open: true
tty: true
entrypoint: bash
restart: always
depends_on:
- db
db:
container_name: postgres_container
image: postgres:11.2-alpine
restart: unless-stopped
networks:
- vapor-it
ports:
- 5432:5432
environment:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_HOST: db
POSTGRES_PORT: 5432
PGDATA: /var/lib/postgresql/data
volumes:
- database_data:/var/lib/postgresql/data
pgadmin:
container_name: pgadmin_container
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: admin
volumes:
- pgadmin:/root/.pgadmin
ports:
- "${PGADMIN_PORT:-5050}:80"
networks:
- vapor-it
restart: unless-stopped
networks:
vapor-it:
driver: bridge
volumes:
database_data:
pgadmin:
# driver: local
另外,在阅读Docker postgres文档时,我在“注意事项”部分遇到了这一点。
如果在容器中启动postgres时没有数据库,则postgres将为您创建默认数据库。尽管这是postgres的预期行为,但这意味着在此期间它将不接受传入的连接。当使用自动化工具(例如docker-compose)同时启动多个容器时,这可能会导致问题。Postgres的dockerhub
我尚未进行这些更改,因为我不确定如何制作该文件或配置的外观。有没有人做过这样的事情,并且在连接Postgresql和使用蒸气作为后端方面有一定的经验?
从理论上讲,行为良好的容器应该能够妥善处理不运行其依赖项的问题,因为尽管您的容器调度程序做出了最大的努力,但是容器可能会来去去去。因此,如果您的应用程序需要一个数据库,但在任何给定时刻该数据库不可用,它应该做出合理的响应。例如,为HTTP请求返回503,或在计划任务延迟后重试。
虽然这是理论,但并不总是适用。在您的情况下,也许您确实只需要Vapor应用程序来等待Postgres可用,在这种情况下,您可以使用包装脚本来轮询数据库,并仅在数据库准备好后才启动主应用程序。
#!/bin/sh
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
command: ["./wait-for-postgres.sh", "db", "vapor-app", "run"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句