首页 > 解决方案 > 如何设置 docker compose 以使用 ssh 通过 EC2 Bastion 连接到私有子网上的 AWS RDS

问题描述

我有一个 django 应用程序的以下配置,该应用程序通过 ssh 进入 ec2 堡垒,我尝试按照这个示例https://emmer.dev/blog/tunneling-a-database-connection-with-docker-compose/ 我是仍然无法配置我的 docker compose 文件以接受到位于私有子网中的 AWS Postgres RDS 的 ssh 隧道。

version: "3.9"

services:
  app:
    build: ./app
    restart: always
    env_file: .env
    volumes:
      - ./app:/app
      - ./app/static:/app/static
    ports:
      - 8000:8000
    depends_on:
      - db
    links:
      - db:db
    networks:
      - "app_network"
  db:
    image: postgres
    restart: always
    env_file: .env
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    ports:
      - 5432:5432
    networks:
      - "app_network"

networks:
  app_network:
    driver: bridge

volumes:
  postgres_data:

发生的事情是通过python manage.py runserver我使用 django 本身能够连接到 RDS 实例,一切都很好。

现在,当我尝试对 docker compose 执行相同操作,docker compose exec app python manage.py migrate或者尝试在 docker compose 启动后从 django shell 访问 RDS 时docker-compose up -d,数据库崩溃并显示以下消息:

django.db.utils.OperationalError: could not translate host name "xxx.zzz.us-east-z.rds.amazonaws.com" to address: nodename nor servname provided, or not known

显然问题是 docker compose 没有选择 ssh 隧道连接

我尝试了多种方法,但仍然不成功。

有人可以帮我弄清楚该怎么做吗

先感谢您

标签: pythondjangoamazon-web-servicesdockerdocker-compose

解决方案


推荐阅读