LINUX.ORG.RU

Контейнер не откликается из-вне

 , ,


0

1

Здравствуйте. Располагаю докером и nodejs.

docker-compose.yml:

version: "2"
services:
  node:
    image: "node:8"
    user: "node"
    working_dir: /home/node/app
    environment:
      - NODE_ENV=production
    volumes:
      - ./:/home/node/app
    expose:
      - "8080"
    command: "npm run build:dev"
    ports:
      - "8080:8080"

На 8080 порту начинает крутиться серв, откликающийся на get-запросы. На локальной винде у меня все пучком, однако докер режет даже локальные коннекты.

Ок, может рукожопый автор топа демон в контейнере не завел? Тестим:

docker exec -it %CONTAINER_ID% curl http://localhost:8080

Ответ:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot GET /</pre>
</body>
</html>

А теперь пробуем из-вне (с локалки):

curl http://localhost:8080

Ответ:

curl: (52) Empty reply from server

Всю голову сломал уже. Вроде и порты вывел, и демон крутится. В чем беда?

Заранее благодарен.


Так докер не localhost использует, а свою сеть, не? Типа 10.0.100.1.

Запускай офф образы

https://hub.docker.com/_/nginx/ https://hub.docker.com/_/node/

node.js и nginx, nginx проксируй в node.js и слинкуй их. А в мир выводи только nginx, а не аппликуху на node.

Nginx и Node.js для экспериментов бери с Alpine, и запускай сначала ручками.

http://anandmanisankar.com/posts/docker-container-nginx-node-redis-example/

menangen ★★★★★ ()

Не знаю как в docker-compose, но в обычном docker EXPOSE в Dockerfile просто показывает какие порты нужно открыть/слушать.

Нужно в запуске добавить -p 8080:8080

Вообщем по быстрому написал пример на nodejs и у меня всё работает.

Dockerfile

FROM ubuntu:18.04

RUN apt-get update && apt-get install -y npm

RUN mkdir server 

COPY hello.ts /server/hello.ts
COPY tsconfig.json /server/tsconfig.json
COPY package.json /server/package.json

RUN cd /server && npm i && npm run build

ENTRYPOINT ["npm", "start", "--prefix", "/server"]

EXPOSE 8080
Собираем образ
docker build -t node_hello .
Запускаем
docker run -d -p 8080:8080 node_hello

Ещё можешь проверить перенаправляет ли docker у тебя порты или нет. Напиши

docker ps
И посмотри на столбец PORTS

Если так, то всё хорошо

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS                    NAMES
7d7e1d11597e        rest_hello          "npm start --prefix …"   4 seconds ago       Up 2 seconds                    0.0.0.0:8080->8080/tcp   thirsty_lichterman
А так не очень
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
6e8a128f77a7        rest_hello          "npm start --prefix …"   9 seconds ago       Up 6 seconds                   8080/tcp            suspicious_mahavira

fsb4000 ★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000
RUN mkdir server 

COPY hello.ts /server/hello.ts
COPY tsconfig.json /server/tsconfig.json
COPY package.json /server/package.json

RUN cd /server && npm i && npm run build

можно зменить на:

COPY . /app
WORKDIR /app
RUN npm i && npm run build

если нужно исключить какие-то файлы, добавляем их в .dockerignore

tz4678 ()