2017-07-19 27 views
1

我有運行這些容器:如何將Node.js應用程序連接到獨立的Docker容器中運行的數據庫?

enter image description here

我能夠在localhost:7474localhost:49160和數據庫訪問節點的應用程序如預期。

然而,該節點的應用程序似乎無法真正連接到數據庫。當我嘗試時出現此錯誤:

Error: connect ECONNREFUSED 127.0.0.1:7474 
    at Object.exports._errnoException (util.js:1018:11) 
    at exports._exceptionWithHostPort (util.js:1041:20) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14) 

這通常意味着它無法在該主機:端口找到數據庫。

同樣,我能夠參觀127.0.0.1:7474並清楚地看到在數據庫運行。

我也試圖連接到0.0.0.0:7474,但也不能工作。

當我在Docker容器中運行節點應用程序本地+數據庫時沒有問題,但是當我也在泊塢窗容器中運行節點應用程序時會發生此問題。

什麼主機和端口應該是數據庫是可用的(我應該怎麼連接?),和我是什麼可能丟失或做錯了什麼?

Dockerfile節點,應用

FROM node:boron 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

# Install app dependencies 
COPY package.json /usr/src/app/ 
RUN yarn 

# Bundle app source 
COPY . /usr/src/app 

EXPOSE 8080 
CMD [ "yarn", "start" ] 

泊塢窗Neo4j的運行CMD

docker run -d -e NEO4J_AUTH=none \ 
    --publish=7474:7474 --publish=7687:7687 \ 
    --volume=$HOME/neo4j/data:/data \ 
    --volume=$HOME/neo4j/logs:/logs \ 
    --volume=$HOME/neo4j/conf:/conf \ 
    --volume=$HOME/neo4j/plugins:/plugins \ 
    neo4j:3.1.4 

回答

2

我所描述的這樣的一種方式(你可以在Rancher看一看閱讀泊塢窗巖後)它可能還有其他可能的方式,目前我還沒有意識到。由於links現在已被棄用,我們可以使用網絡將一個容器連接到另一個容器。所有的

首先我們創建這個命令的網絡:

docker network create -d bridge --subnet 172.25.0.0/16 isolated_nw

然後我們從我們所創建的網絡中分配一個IP地址連接mysql的容器。是的,我們也指定了網絡。此命令執行所需要的目的:

docker run -itd --rm \ 
    --network=isolated_nw \ 
    --ip=172.25.3.3 \ 
    --name=mysql \ 
    --volume "$(pwd)/database/:/docker-entrypoint-initdb.d" mysql 

現在我們已經得到了我們的MySQL容器運行並連接到我們創建的isolated_nw。是時候讓我們的其他容器連接到同一個網絡並訪問mysql容器。在運行容器時添加--network=isolated_nw標誌將容器添加到網絡。我們將在運行需要訪問mysql的其他容器時使用此標誌。

現在完成了!在這個其他容器中,我們可以在我們分配的IP地址上訪問mysql容器,即172.25.3.3。這些東西的實現可以看到here

相關問題