Docker Контейнер localhost не подключен - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть приложение React, которое подключено к серверу json, который я пытаюсь запустить в контейнере Docker.Dockerfile выглядит следующим образом:

# base image
FROM node:alpine

# set working directory
WORKDIR '/app'

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install --silent
RUN npm install react-scripts@3.0.1 -g --silent
RUN npm i serve
COPY . . 

# start app
CMD ["npm", "start"]
CMD ["node", "server.js"]
CMD ["serve", "-p", "3000", "-s", "."]

Сервер json выглядит следующим образом:

var jsonServer  = require('json-server')
var server      = jsonServer.create()
var router      = jsonServer.router(require('./db.js')())
var middlewares = jsonServer.defaults()

server.use(middlewares)
server.use(router)
server.listen(8080, function () {
console.log('JSON Server is running')
})

Проблема в том, что когда я запускаю docker run -it -p 3000:3000 personal-react-website, он говорит, что мое приложение работает на http://localhost:3000 но когда я иду туда, он ничего мне не показывает.Мне было интересно, может ли кто-нибудь помочь мне понять, почему это не так?

В моей тестовой среде мое приложение React находится на порте 3000, а сервер json - на 8080, и я просто набираю

npm start
node server.js

любой все отлично работает.

1 Ответ

1 голос
/ 19 сентября 2019

Вы app server и npm start никогда не выполнялись из-за поведения CMD.

В Dockerfile может быть только одна инструкция CMD.Если вы укажете более одного CMD, то вступит в силу только последний CMD.

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

Или, если вы хотите найти простое решение, вы можете попробовать

Как я могу запустить несколько сценариев npm параллельно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...