Acceda al servicio de hermanos desde el servicio del contenedor acoplable
Ejecuto el contenedor Docker basado en imágenes de nodo (terminal de inicio rápido de Docker desde 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
Inicio el cliente Node (en el puerto 3000) y el servidor Node (basado en express) (en el puerto 3009). El cliente accede al servidor REST a través de una llamada 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)
})
}
Funciona perfectamente desde el host (el cliente accede a localhost: 3009 y devuelve resultados). Y puedo llamar: 3009 y nuevamente tener resultados correctos.
Pero cuando construyo y ejecuto la imagen de Docker falla.
docker run -p 3000-3009:3000-3009 --add-host="mongodb:192.168.12.151" MyDockerImage
--add-host
se usa para acceder a mongo db que se ejecuta en el host.
El puerto del servidor 3009 está expuesto, así que tengo un truco para llamar
192.168.99.100:3009 //the docker IP and exposed port
en lugar delocalhost:3009
pero sería bueno dejar que el servidor de acceso del cliente directamente dentro del contenedor.
¿Cómo especificar localhost correctamente dentro del contenedor acoplable para acceder al servicio hermano?
ACTUALIZAR
#!/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