#c# #docker #docker-compose
#c# #docker #docker-compose
Вопрос:
В моем решении у меня есть 2 проекта веб-API, я пытаюсь запустить их на docker contains, но по какой-то причине образ catalog.api не запускается на порту 8000, при самом первом запуске он смог запуститься на порту 8000, но после того, как я добавил basket.api на порт 8001api каталога выдает ошибку. Все мои другие докеры могут снова перезапускаться на том же порту, только контейнер catalog.api не запускается на порту 8000.
ОШИБКА: для catalog.api не удается запустить службу catalog.api: Порты недоступны: прослушивание tcp 0.0.0.0: 8000: привязка: была предпринята попытка получить доступ к сокету способом, запрещенным его правами доступа.
Я не вижу, чтобы порт 8000 использовался где-либо, но все же api не запускается на этом порту, я могу запустить api на другом порту, отличном от 8000, но мне нужно понять, почему он не запускается на самом 8000.
C:WINDOWSsystem32>netstat -an|find /i "8000"
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING
TCP [::]:8000 [::]:0 LISTENING
ниже приведен мой docker-compose.override.yml
version: '3.4'
services:
catalogdb:
container_name: catalogdb
restart: always
volumes:
- ${WEBAPP_STORAGE_HOME}/site:/data/db
ports:
- "27017:27017"
basketdb:
container_name: basketdb
restart: always
ports:
- "6379:6379"
catalog.api:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- "CatalogDatabaseSettings:ConnectionString=mongodb://catalogdb:27017"
depends_on:
- catalogdb
volumes:
- ${HOME}/.microsoft/usersecrets/:/root/.microsoft/usersecrets
- ${HOME}/.aspnet/https:/root/.aspnet/https/
ports:
- "8000:80"
basket.api:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- "ConnectionStrings:Redis=basketdb:6379"
depends_on:
- basketdb
volumes:
- ${HOME}/.microsoft/usersecrets/:/root/.microsoft/usersecrets
- ${HOME}/.aspnet/https:/root/.aspnet/https/
ports:
- "8001:80"
Ответ №1:
Как я прочитал из вашего файла docker-compose, вы пытаетесь сопоставить службы catalog.api и basket.api на одном и том же порту 80. Это конфликт. Я думаю, вам следует сопоставить catalog.api 8000 с 8000 и basket.api 8001 с 8001, чтобы ваши конечные точки не конфликтовали на хост-компьютере (я полагаю, это локальный хост).
Если вы это сделаете, вы сможете получить доступ к catalog.api по адресу localhost:8000
и basket.api по адресу localhost:8001
Таким образом, в принципе, обе службы не могут быть доступны на одном и том же порту.