Фактически 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