Не удается предоставить порт для приложения Node Express в контейнере Centos7

#node.js #docker #centos

#node.js #docker #centos

Вопрос:

Я создаю приложение HTTP-сервера узла изображения. Приложение запускается на порту 3000. Но я не могу связаться с ним с localhost.

Dockerfile:

 FROM centos:7

RUN curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
RUN yum install -y nodejs
RUN node -v
#yarn
RUN curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo
RUN rpm --import https://dl.yarnpkg.com/rpm/pubkey.gpg
RUN yum install -y yarn
# Set up mongodb yum repo entry
RUN echo -e "
[mongodb-org-4.0]n
name=MongoDB Repositoryn
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/n
gpgcheck=1n
enabled=1n
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.ascn" >> /etc/yum.repos.d/mongodb.repo

# Install mongodb
RUN yum update -y amp;amp; yum install -y mongodb-org

COPY server.js /home/server.js
COPY start.sh  /home/start.sh
COPY package.json  /home/package.json

# Install js dependencies
RUN cd /home
RUN yarn

EXPOSE 3000

ENTRYPOINT ["sh", "/home/start.sh"]
  

start.sh:

 echo "HELLO FROM SH FILE!"
yarn

node ./server.js
  

server.js:

 const express = require('express')
const app = express()
const port = 3000

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

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

Для контейнера сборки я использую:

docker build -t "gepick:dev1" .

Для начального контейнера я использую:

docker run -i -t 2f0fd105f299 -p 3000:3000 /bin/bash

Я уверен, что приложение запущено, потому что вывод на консоль:

Example app listening on port 3000!

Но когда я пытаюсь запустить браузер app throw на localhost: 3000, я получаю:

This site can’t be reached

Ответ №1:

Что это docker run -i -t 2f0fd105f299 -p 3000:3000 /bin/bash ???

Ваша команда запуска должна быть

 docker run -i -t -p 3000:3000 2f0fd105f299
  

Добавление аргументов exposal после идентификатора изображения просто передает их вашему start.sh скрипту. Docker считывает аргументы только перед именем / идентификатором изображения.