Как получить доступ к приложению контейнера Docker на локальном компьютере? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть простое приложение Node.js / Express:

const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

Работает нормально, когда я запускаю его как: node src / app.js

Теперь я пытаюсь запустить его в контейнере Docker. Dockerfile - это:

FROM node:8

WORKDIR /app
ADD src/. /app/src
ADD package.json package-lock.json /app/

RUN npm install

COPY . /app

EXPOSE 3000

CMD [ "node", "src/app.js" ]

Все начинается отлично: docker run <my image>:

Listening on port 3000

Но теперь я не могу получить к нему доступ в своем браузере: http://localhost:3000

This site can’t be reached localhost refused to connect.

То же самое произойдет, если я попытаюсь запустить его в docker-compose:

version: '3.4'

services:
  service1:
    image: xxxxxx
    ports:
      - 8080:8080
    volumes:
      - xxxxxxxx
  myapp:
    build: 
      context: .
      dockerfile: Dockerfile
    networks:
      - private
    ports:
      - 3000
    command:
      node src/app.js

Не уверен, правильно ли я разбираюсь с портами в обоих файлах Docker

Ответы [ 3 ]

0 голосов
/ 06 июня 2019

попробуйте это:

services:
  myapp:
    build: 
      context: .
      dockerfile: Dockerfile
    networks:
      - private
    ports:
      - 3000:3000 ##THIS IS THE CHANGE, YOU NEED TO MAP MACHINE PORT TO CONTAINER
    command:
      node src/app.js
0 голосов
/ 09 июня 2019

Когда вы работаете с докером, вы должны определить хост для своего приложения как 0.0.0.0 вместо localhost.

Для вашего экспресс-приложения вы можете определить хост для app.listen вызова.

Проверьте документацию : app.listen ([port [, host [, backlog]]] [, callback])

Ваш экспресс-код должен бытьобновлено до:

const port = 3000
const host = '0.0.0.0'

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, host, () => console.log(`Example app listening on ${port}!`))

Также важно опубликовать порты Docker:

  • Работает Docker: docker run -p 3000:3000 <my image>
  • Запуск Docker-compose:
services:
  myapp:
    build: 
      context: .
      dockerfile: Dockerfile
    networks:
      - private
    ports:
      - 3000:3000
    command:
      node src/app.js
0 голосов
/ 06 июня 2019

Вам необходимо опубликовать порты

docker run -p 3000:3000 <my image>

-p - обозначает публикацию

...