Редактирование / обновление: Я нашел репозиторий, который, похоже, воссоздает ту же проблему, что и у меня: 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 справится?