相关疑难解决方法(0)

使用 sam 时如何将 lambda 连接到可在 Mac 本地主机上本地访问的数据库

背景

  • 我有一个连接到 RDS 数据库的 lambda。RDS 数据库和 lambda 位于 VPC 中。开发人员只能通过 Bastion 实例访问该数据库。
  • 在开发过程中,我们可以使用sam测试 lambda 。这对于不依赖于数据库的 API 来说效果很好。
  • 对于依赖于数据库的 API,我理想情况下希望连接到在 Gamma 阶段运行的数据库实例。但是,我们无法直接连接到它,因为它位于 VPC 中。

我尝试过的

  • 为了解决这个问题,我们可以在堡垒实例上使用带有端口转发的 SSM 代理,以便可以在 Mac 的本地主机上访问数据库。参见说明。示例代码如下:
aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters host="mydb.example.us-east-2.rds.amazonaws.com",portNumber="3306",localPortNumber="3306"
Run Code Online (Sandbox Code Playgroud)
  • 我现在可以通过 CLI 或像Psequelhttp://127.0.0.1:3306/这样的 GUI在本地连接到它。无需使用 SSH。
  • 但是,如果我尝试让 lambda 连接到http://127.0.0.1:3306/,则会收到错误Connection refused
  • 我的理解是,这是因为127.0.0.1解析为 docker 容器的本地主机而不是我机器的本地主机。
  • 根据码头工人文档host.docker.internal ... resolves to the internal IP address used by the host
  • 但是,如果我尝试让 lambda 连接到http://host.docker.internal:3306/ …

amazon-web-services amazon-rds docker aws-lambda aws-sam-cli

5
推荐指数
1
解决办法
1651
查看次数

无法使用超集连接 clickhouse 数据库发生错误:无法加载数据库驱动程序:clickhouse

URI 字符串为:clickhouse://gpsec:xxx@xxx:8858/sec

docker-compose logs -f -t superset
Run Code Online (Sandbox Code Playgroud)
superset_app             | 2021-02-02T03:23:36.323066230Z 172.17.0.233 - - [02/Feb/2021 03:23:36] "GET /api/v1/database/_info?q=(keys:!(permissions)) HTTP/1.1" 200 -
superset_app             | 2021-02-02T03:23:36.323076390Z INFO:werkzeug:172.17.0.233 - - [02/Feb/2021 03:23:36] "GET /api/v1/database/_info?q=(keys:!(permissions)) HTTP/1.1" 200 -
superset_app             | 2021-02-02T03:23:36.377123020Z 172.17.0.233 - - [02/Feb/2021 03:23:36] "GET /static/assets/images/favicon.png HTTP/1.1" 200 -
superset_app             | 2021-02-02T03:23:36.377136655Z INFO:werkzeug:172.17.0.233 - - [02/Feb/2021 03:23:36] "GET /static/assets/images/favicon.png HTTP/1.1" 200 -
superset_app             | 2021-02-02T03:23:48.713990050Z DEBUG:superset.models.core:Database.get_sqla_engine(). Masked URL: clickhouse://gpsec:XXXXXXXXXX@10.200.xx.xx:8858/sec
superset_app             | 2021-02-02T03:23:48.716697915Z DEBUG:superset.stats_logger:[stats_logger] (incr) DatabaseRestApi.test_connection.error
superset_app             | 2021-02-02T03:23:48.716723303Z DEBUG:superset.stats_logger:[stats_logger] (timing) DatabaseRestApi.test_connection.time | 7.412515580654144 …
Run Code Online (Sandbox Code Playgroud)

docker clickhouse apache-superset

4
推荐指数
1
解决办法
6093
查看次数

Docker OSX:从容器连接到主机端口

我的问题

我正在尝试在docker容器上安装Flask应用程序.该应用程序需要通过pip安装一些软件包.

我在端口9000上使用本地(主机,而不是容器)pip repo.因此,我尝试了以下方法:

pip install -i 127.0.0.1:9000/simple my_custom_package
Run Code Online (Sandbox Code Playgroud)

此调用适用于主机,但当我在容器上运行时,我得到:

Collecting my_custom_package
Url '127.0.0.1:9000/simple/my_custom_package/' is ignored. 
    It is either a non-existing path or lacks a specific scheme.
Run Code Online (Sandbox Code Playgroud)

我做了一些尝试curl,但似乎容器不能简单地访问主机上的端口.

设置

我试过了什么

如何从OSX上的Docker容器访问主机端口?

macos pip docker

3
推荐指数
1
解决办法
961
查看次数

如何从docker容器访问Host的计算机的localhost 127.0.0.1

我在本地主机上托管Git守护程序,即'/usr/bin/git daemon --listen=127.0.0.1 --base-path=/opt'作为systemd服务,我试图从docker容器访问它.我没有提到端口,因为我不想将端口暴露给外部网络.

Dockerfile:

RUN git clone git://127.0.0.1/repo/ repo_dir
Run Code Online (Sandbox Code Playgroud)

但它不起作用,它看起来像在容器内试图连接容器的localhost.

那么如何从Docker容器连接主机的localhost?

git-daemon docker dockerfile docker-compose

2
推荐指数
1
解决办法
8453
查看次数

django无法在docker-compose中连接mysql

我是docker的新手,现在我试图通过docker-compose在docker中使用mariadb运行django,但我总是遇到这个错误:

我用Docker version 17.09.1-ce, build 19e2cf6,docker-compose version 1.18.0, build 8dd22a9

django.db.utils.OperationalError:(2003年,'无法连接到'mariadb55上的MySQL服务器'(111"连接被拒绝")')

我可以docker-compose up db在本地或远程运行后正确连接数据库,我甚至可以python manage.py runserver 0.0.0.0:6001anaconda虚拟环境中正确运行db,通过设置settings.py文件的参数来连接docker中的服务,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'belter',
        # 'HOST': 'mariadb55',
        'HOST': '127.0.0.1',
        'PORT': '3302',
        'PASSWORD': 'belter_2017',
        'default-character-set': 'utf8',
        'OPTIONS': {
            'sql_mode': 'traditional',
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的docker-compose.yml文件

version: '3'

services:
  db:
    image: mariadb:5.5
    restart: always
    environment:
      - MYSQL_HOST=localhost
      - MYSQL_PORT=3306
      - MYSQL_ROOT_HOST=%
      - MYSQL_DATABASE=test
      - …
Run Code Online (Sandbox Code Playgroud)

mysql django mariadb docker docker-compose

2
推荐指数
1
解决办法
5722
查看次数

通过 Docker 从 .NET 应用程序连接到 Azurite

我有一个 .NET 6 API(在 Docker 中运行)和 Azurite(在 Docker 中运行)。

我尝试使用 .NET SDK 从 .NET 应用程序连接到 Azurite,但在 Docker 日志中收到以下错误:

System.AggregateException: 6 次尝试后重试失败。可以在 ClientOptions.Retry 中调整重试设置。(连接被拒绝(蓝铜矿:10000))(连接被拒绝(蓝铜矿:10000))(连接被拒绝(蓝铜矿:10000))(连接被拒绝(蓝铜矿:10000))(连接被拒绝(蓝铜矿:10000))(连接被拒绝(蓝铜矿:10000))(连接被拒绝(蓝铜矿:10000)) :10000))

它在第二行 ( CreateIfNotExists()) 处即将消失:

_blobContainerClient = new BlobContainerClient(connectionString, containerName);
_blobContainerClient.CreateIfNotExists();
Run Code Online (Sandbox Code Playgroud)

这是我的 .NET 应用程序中的连接字符串:

"Azure": {
        "StorageConnectionString": "UseDevelopmentStorage=true"
    }
Run Code Online (Sandbox Code Playgroud)

这是我的docker-compose.yml文件:

version: '3.4'

services:
  api:
    image: ${DOCKER_REGISTRY-}api
    container_name: aft-backend-api
    build:
      context: src
      dockerfile: API/Dockerfile    
    networks:
      - aft-backend
    environment:
      - ASPNETCORE_URLS=http://+:5000
      - Azure__StorageConnectionString=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://azurite;
    depends_on:
      - azurite
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    container_name: aft-backend-azurite
    hostname: azurite
    restart: always
    command: …
Run Code Online (Sandbox Code Playgroud)

.net docker docker-compose azurite

2
推荐指数
2
解决办法
6802
查看次数