AWS S3 SDK и docker -compose - нет устройства или адреса - PullRequest
0 голосов
/ 27 января 2020

Редактирование / обновление: Я нашел репозиторий, который, похоже, воссоздает ту же проблему, что и у меня: https://github.com/wolfgangmeyers/aws-sdk-net-1014, и это проблема github (https://github.com/aws/aws-sdk-net/issues/1014) с объяснением / исправлением в конце комментария.

У меня странная проблема, особенно с docker -compose и Amazon S3 SDK для C#.

У нас есть тестовая установка с docker - compose, где наши зависимости (dynamicodb и s3) запускаются с docker -compose, а также наши тесты внутри контейнера docker.

У нас есть следующий docker -compose.yml

version: '3'

services:
  myservice.unit.tests
    image: myservice.unit.tests
    build:
      context: ./
      dockerfile: MyService/MyService.Tests/Dockerfile
    depends_on:
      - dynamodb
      - s3mock
  dynamodb:
    image: "instructure/dynamo-local-admin"
    ports:
      - "8000:8000"

  s3mock:
    image: "adobe/s3mock"
    ports:
      - "9090:9090"
    environment:
      - initialBuckets=myBucket

Наши тесты и AWS Клиенты настроены на использование имен хостов, генерируемых в сети docker, например. «DynamodB: 8000» и «S3mock: 9090». Мы перезаписываем ServiceUrl в обоих клиентах следующим образом (пример из клиента s3)

AmazonS3Config config = new AmazonS3Config {
    ServiceURL = s3URL
};

Все наши тесты, которые работают с динамодабом, работают нормально, но те, которые идут к s3mock (с AWS S3 SDK) не может найти адрес. В конечном итоге происходит сбой с исключением System.Net.Http.HttpRequestException : No such device or address.

Я убедился, что если я выполнил c в среду docker с образом Ubuntu, подключенным к той же сети, я могу свернуть http://s3mock:9090 и получить 200 ОК, и если я напишу тест в том же классе, что и тесты aws s3, который использует HttpClient, он также получит ответ 200 ОК от сервера s3mock.

public async void test() //this tests writes out 200 OK response when run from the same test suite that the other s3 is in (and they are failing)
{
    var resp = await new HttpClient().GetAsync("http://s3mock:9090");
    Console.WriteLine("**TESTING**");
    Console.WriteLine(resp.ToString());
}

Я использую Ubuntu 19.10, и я попробовал несколько AWS S3 SDKs (а также новейший), но он не работает ни в одном из них.

Что здесь происходит? И почему AmazonS3Client не может подключиться к s3mock внутри сети docker, когда может работать HttpClient по умолчанию из C#, а контейнер ubuntu справится?

...