2017-09-06 25 views
0

我上運行的基於節點的圖像泊塢窗容器(從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 

我開始節點客戶端(3000端口)和節點(快遞爲主)服務器(在3009港口)。客戶端通過AJAX調用訪問REST服務器。

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) 
     }) 
} 

它從主機(客戶端訪問本地主機: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,但會很高興地直接讓客戶端訪問服務器的容器內。

如何在Docker容器內正確指定localhost來訪問兄弟服務?

UPDATE

#!/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

有些事情很少,你可以在這裏做

讓其他容器的網絡中的其他容器運行

docker run --net container:<id> MyDockerImage 

現在你的MongoDB將在本地主機訪問。但端口需要在其網絡中使用

創建網絡自己,並用它

docker network create myapps 

docker run --name mongodb_service --net myapps mongodb 
docker run -p 3000-3009:3000-3009 --net myapps MyDockerImage 

現在你MyDockerImage內,MongoDB的可以在mongodb_service

使用達成的容器被曝光碼頭工作人員組成

您可以使用docker-compose將它們作爲合成物運行

version: '3' 
services: 
    mongo: 
    image: mongodb 
    app: 
    build: 
     context: . 
    ports: 
     - "3000-3009:3000-3009" 

而現在應用的MongoDB將到達與名蒙戈

+0

問題不MongoDB的根本。我成功訪問了mongo。問題是從另一個訪問一個服務。兩者都在同一個容器中運行。我嘗試了docker-compose爲mongo建立了一個單獨的imkage鏈接,但沒關係。假設我根本沒有mongo。我需要的是從localhost:3000(都在同一個容器)調用localhost:3009 – StanislavL

+0

'/ server_start.sh'的內容是什麼 –

+0

該文件被添加 – StanislavL