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

Connect to Azurite from .NET App via Docker

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

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

System.AggregateException: Retry failed after 6 tries. Retry settings can be adjusted in ClientOptions.Retry. (Connection refused (azurite:10000)) (Connection refused (azurite:10000)) (Connection refused (azurite:10000)) (Connection refused (azurite:10000)) (Connection refused (azurite:10000)) (Connection refused (azurite:10000))

第二行快死了 (CreateIfNotExists()):

_blobContainerClient = new BlobContainerClient(connectionString, containerName);
_blobContainerClient.CreateIfNotExists();

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

"Azure": {
        "StorageConnectionString": "UseDevelopmentStorage=true"
    }

这是我的 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: 'azurite --blobHost 127.0.0.1 --blobPort 10000 --queueHost 127.0.0.1 --queuePort 10001'
    ports:
      - 10000:10000
      - 10001:10001
    networks:
      - aft-backend

networks:
  aft-backend:
    name: aft-backend-network

注意事项:

我注意到这个 ,但是它似乎已经过时并且没有明确的答案。

有人能帮忙吗?

提前致谢。

我也很难过。归根结底,我是这样工作的:

docker-compose.yaml

version: "3.9"
services:
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    command: "azurite --loose --blobHost 0.0.0.0 --blobPort 10000 --queueHost 0.0.0.0 --queuePort 10001 --location /workspace --debug /workspace/debug.log"
    ports:
      - 10010:10000
      - 10011:10001
      - 10012:10002
    volumes:
      - ./azurite:/workspace

  backend:
    build:
      context: backend
      args:
        AzureWebJobsStorage: "${AzureWebJobsStorage}"
    ports:
      - 10004:80
    depends_on:
      - azurite

应用中使用的连接字符串:DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://host.docker.internal:10010/devstoreaccount1;QueueEndpoint=http://host.docker.internal:10011/devstoreaccount1;

我正在使用 env 文件传递​​连接字符串,但它在您的 local.settings.json 文件中应该也能正常工作。

在@peinearydevelopment 的回答的帮助下得到它的工作。

我必须将 docker-compose 文件更改为:

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=DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://host.docker.internal:10000/devstoreaccount1;QueueEndpoint=http://host.docker.internal:10001/devstoreaccount1;
    depends_on:
      - azurite
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    container_name: aft-backend-azurite
    hostname: azurite
    restart: always
    command: 'azurite --loose --blobHost 0.0.0.0 --blobPort 10000 --queueHost 0.0.0.0 --queuePort 10001 --location /workspace --debug /workspace/debug.log'
    ports:
      - 10000:10000
      - 10001:10001
    volumes:
      - ./azurite:/workspace
    networks:
      - aft-backend

networks:
  aft-backend:
    name: aft-backend-network

主要是使用正确的 Azure 连接字符串,并确保端口与 azurite 命令中设置的匹配。