Невозможно привязаться к 0.0.0.0 в C#/Docker (без ASP!)C#

Место общения программистов C#
Anonymous
Невозможно привязаться к 0.0.0.0 в C#/Docker (без ASP!)

Сообщение Anonymous »

Я пытаюсь открыть порт из консольного приложения на C#, которое работает в Docker-контейнере. Я считаю, что основная проблема заключается в том, что я не могу привязаться к 0.0.0.0:1234. Чтобы продемонстрировать проблему, я поделюсь простым веб-сервером. Я получаю сообщение об ошибке

System.Net.HttpListenerException: «Запрос не поддерживается».
при запуске следующего кода:

Код: Выделить всё

using System.Net;
using System.Text;

string html = "Hello World";

HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://0.0.0.0:1234/");
//listener.Prefixes.Add("http://localhost:1234/");

listener.Start();

while (true)
{
HttpListenerContext context = listener.GetContext();
HttpListenerResponse response = context.Response;

byte[] buffer = Encoding.UTF8.GetBytes(html);
response.ContentLength64 = buffer.Length;

Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);

output.Close();
}
Я запускаю код, используя интегрированные средства Docker VS 2022. Мой Dockerfile выглядит так:

Код: Выделить всё

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
EXPOSE 1234
USER app
WORKDIR /app

[...]
И мой docker-compose.yml:

Код: Выделить всё

services:
demo:
image: ${DOCKER_REGISTRY-}demo
build:
context: .
dockerfile: demo/Dockerfile
ports:
- "1234:1234"
Что я могу сделать, чтобы получить доступ к своему контейнеру из браузера по адресу http://localhost:1234?
Что я пробовал:
Я выполнил код на своем хосте (без использования докера), и здесь он сработал при привязке к localhost: 1234.
Я попробовал привязать к localhost: 1234, когда хостинг в докер-контейнере. Никаких ошибок не происходит, но браузер сообщает мне, что сервер, похоже, не работает.
Я проверил, что сопоставление работает при привязке к localhost:1234 (что затем привело меня к выводу, что я должен быть привязан к 0.0.0.0:1234).

Код: Выделить всё

docker port demo_1
1234/tcp -> 0.0.0.0:1234
Я попробовал пару портов (80, 8080, наконец, 1234), чтобы не конфликтовать с какой-то предопределённой конфигурацией из образа.
Я пытался найти документацию по возможным переменным среды, но все, что вы там нашли, похоже, связано с ASP.


Подробнее здесь: https://stackoverflow.com/questions/791 ... ker-no-asp

Вернуться в «C#»