Acessar o serviço irmão do serviço do docker container
Executo o contêiner do docker baseado em imagem do Nó (terminal de início rápido do Docker no 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 o cliente do nó (na porta 3000) e o servidor do nó (com base expressa) (na porta 3009). O cliente acessa o servidor REST por chamada 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 perfeitamente no host (o cliente acessa o host local: 3009 e retorna os resultados). E posso ligar para: 3009 e, novamente, ter resultados corretos.
Mas quando eu construo e executo a imagem do docker, ela falha.
docker run -p 3000-3009:3000-3009 --add-host="mongodb:192.168.12.151" MyDockerImage
--add-host
é usado para acessar o mongo db em execução no host.
A porta do servidor 3009 está exposta, então eu tenho um truque de trabalho para chamar
192.168.99.100:3009 //the docker IP and exposed port
ao invés delocalhost:3009
mas seria bom permitir que o cliente acesse o servidor diretamente dentro do contêiner.
Como especificar o host local corretamente dentro do contêiner do docker para acessar o serviço de irmão?
ATUALIZAR
#!/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