Доступ к веб-API CoreClr, размещенному в Docker
Я пытаюсь выполнить несколько простых сценариев, связанных с запуском приложений на основе ядра.net в контейнере Docker. Я работаю на Windows 10 и использую VS 2015 для Dev. Я установил инструменты Docker VS и Docker-Machine, чтобы позволить мне использовать Docker локально.
Используя различные учебники онлайн, я смог:
- Запустите проект web api локально из VS успешно
- Установите ядро .net на мою докер-машину "по умолчанию" (IP-адрес которой равен 192.168.99.100, который я получил, запустив "docker-machine inspect default")
- Создайте образ докера, содержащий мои простые веб-API, используя VS
- Выставьте порт 5123 на образ докера
Моя проблема заключается в том, что даже после последнего шага (который подробно описан в нескольких онлайн-уроках) я все еще не могу вызвать вызов веб-API при вводе http://192.168.99.100:5123/api/values в браузер (я получаю сообщение об ошибке "Отказано в соединении").
Конфигурация на моем изображении указывает, что экспозиция порта работала (я удалил некоторые поля, которые имели нулевые значения):
{
"Id": "675c3aa63600ae3db7fce0353f5e3e42a10a31d436c48b1d7f3b0aff0887f45c",
"Created": "2016-09-05T16:55:04.917207712Z",
"Path": "/bin/sh",
"Args": [
"-c",
"dotnet CoreClr.Web.dll"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 10465,
"ExitCode": 0,
"Error": "",
"StartedAt": "2016-09-05T16:55:05.052990865Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
69,
287
],
},
"GraphDriver": {
"Name": "aufs",
"Data": null
},
"Mounts": [],
"Config": {
"Hostname": "675c3aa63600",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"5123/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"DOTNET_VERSION=1.0.0",
"DOTNET_DOWNLOAD_URL=https://dotnetcli.blob.core.windows.net/dotnet/preview/Binaries/1.0.0/dotnet-debian-x64.1.0.0.tar.gz",
"ASPNETCORE_URLS=http://*:5123"
],
"Cmd": null,
"Image": "username/coreclr.web",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": [
"/bin/sh",
"-c",
"dotnet CoreClr.Web.dll"
],
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "509cbf68bb9d642a71ca26380541ceee1c1b86ed886515b52a62e21aecb5ca94",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"5123/tcp": null
},
"SandboxKey": "/var/run/docker/netns/509cbf68bb9d",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "16e381f947d84f37040a71e81a213e31014ef8327176a2e18fab12da2c429b5c",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.11",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:0b",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "1eb481804e0a0f02ddaeca8e0868225b4d76795066fd0aedf950c83f8ee377fd",
"EndpointID": "16e381f947d84f37040a71e81a213e31014ef8327176a2e18fab12da2c429b5c",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.11",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:0b"
}
}
}
}
Это насколько уроки / примеры, которые я нашел в сети, пошли, и у них не было этой проблемы.
Любая помощь или указатели приветствуются.
Спасибо
редактировать: добавлен web.config
?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
-->
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
с настройками приложений:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
1 ответ
Не совсем уверен, почему это работает, но запуск контейнера с набором аргументов 'dp' делает:
$ docker run -dp 5123: 5123 / tcp --name = имя пользователя dev-api /coreclr.web
Разница в конфигурации контейнера заключается в том, что привязки портов в узле HostConfig установлены
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {
"5123/tcp": [
{
"HostIp": "",
"HostPort": "5123"
}
]
},