Изображение Docker не запускается на том же порту

#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

Таким образом, в принципе, обе службы не могут быть доступны на одном и том же порту.