У меня проблемы с доступом к приложениям, которые должны предоставлять порты хосту через docker-compose. Вот воспроизводимый пример:
Я создаю новое угловое приложение, используя угловой CLI:
ng new angular-docker
Затем я создаю Dockerfile со следующим содержимым в этом каталоге:
FROM node:8
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install
EXPOSE 4200
CMD ["npm", "start"]
Затем я создаю файл docker-compose.yaml в том же каталоге:
version: '3'
services:
angular:
build: .
container_name: angular-docker
volumes:
- ./src:/usr/src/app/src
ports:
- "4200:4200"
Тогда я бегу:
docker-compose up
Я жду, пока получу следующую строку в выводе docker-compose
angular-docker | ** Angular Live Development Server is listening on localhost: 4200, open your browser on http://localhost:4200/ **
С docker inspect angular-docker
Я вижу, что действует правило переадресации портов:
...
"Ports": {
"4200/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "4200"
}
]
},
...
Теперь, когда я пытаюсь перейти на http://localhost:4200 в Chrome, я получаю ERR_EMPTY_RESPONSE.
Однако, когда я использую docker exec -it angular-docker bash
, чтобы зайти в контейнер, я получаю ответ, когда я curl localhost:4200
.
Мое окружение:
- ОС: Windows 10 Pro Версия 10.0.16299 Build 16299
- Докер: 18.03.1-ce-win65 (17513)
Я подумал, что это может быть проблема с брандмауэром. Поэтому для отладки я закрыл приложение брандмауэра (я использую Kaspersky Internet Security), но не повезло.
Почему я не могу получить доступ к контейнеру из открытого порта?
EDIT:
netstat -an | findstr ":4200"
возвращает следующее:
Proto Local Address Foreign Address State
TCP 0.0.0.0:4200 0.0.0.0:0 LISTENING
TCP [::1]:4200 [::]:0 LISTENING