Фактически process2 (клиент) пытается вызвать process1 (сервер) внутренне. Сервер не должен быть доступен за пределами контейнера. Я получаю доступ к той же машине (внутри контейнера). Работает нормально без докера. Я запускаю process1 и process2 на хосте и успешно вызываю сервер с клиента.

ускаю Docker-контейнер на основе образа Node (терминал быстрого запуска Docker из Windows)

FROM node:7.8.0
ENV NPM_CONFIG_LOGLEVEL warn

VOLUME /tmp
#copy server source /piu contains node server and /piu/client contains react+redux client
ADD piu /piu
ADD server_start.sh /

#clean windows \r char to make the .sh file real executable
RUN sed -i -e 's/\r$//' server_start.sh

CMD ./server_start.sh

EXPOSE 3000 3009

Я запускаю Node client (на порту 3000) и Node (на основе экспресс) сервера (на порту 3009). Клиент получает доступ к REST-серверу через AJAX-вызов.

componentDidMount() {
    const that = this;
    console.log('SERVER_URL=' + SERVER_URL); //the output is localhost:3009
    axios
        .get(SERVER_URL + '/posts')
        .then(res => {
            that.setState({pageInfo: res.data});
        })
        .catch(err => {
            console.log(err)
        })
}

Он отлично работает с хоста (клиент обращается к localhost: 3009 и возвращает результаты). И я могу позвонить: 3009 и снова иметь правильные результаты.

Но когда я собираю и запускаю образ докера, он терпит неудачу.

docker run -p 3000-3009:3000-3009 --add-host="mongodb:192.168.12.151" MyDockerImage

--add-host используется для доступа к базе данных mongo, работающей на хосте

Серверный порт 3009 открыт, поэтому у меня есть рабочий прием

192.168.99.100:3009 //the docker IP and exposed port

вместоlocalhost:3009 но было бы неплохо позволить клиентскому серверу доступа непосредственно внутри контейнера.

Как правильно указать localhost внутри docker-контейнера для доступа к сервису-брату?

ОБНОВИТЬ

#!/bin/bash

# Start the first process (server)
npm run start_docker --prefix piu &
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start my_first_process: $status"
  exit $status
fi

# Start the second process (client)
npm run start --prefix piu/client
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to start my_second_process: $status"
  exit $status
fi

Ответы на вопрос(1)

Ваш ответ на вопрос