运行2个服务

我正在为github的Linkurious项目build立一个映像,这个映像是基于neo4j数据库中的映像。 neo映像会自动在端口7474上运行服务器,而我的映像将​​在端口8000上运行。

当我运行我的图像我发布这两个端口(我可以做这个与EXPOSE?):

docker run -d --publish=7474:7474 --publish=8000:8000 linkurious 

但只有我的服务器似乎运行。 如果我点击http://[ip]:7474/我什么也得不到。 有什么特别的我必须做,以确保他们都运行?

*编辑我*

这里是我的Dockerfile:

 FROM neo4j/neo4j:latest RUN apt-get -y update RUN apt-get install -y git RUN apt-get install -y npm RUN apt-get install -y nodejs-legacy RUN git clone git://github.com/Linkurious/linkurious.js.git RUN cd linkurious.js && npm install && npm run build CMD cd linkurious.js && npm start 

*编辑II *

也许有助于解释我的窘境,我问了一个不同的问题

EXPOSE是允许跨容器通信(在相同的docker守护进程内), docker run --link选项。
端口映射可以将EXPOSEd端口映射到主机,以允许客户端到容器的通信。 所以你需要 – --publish

另请参阅“ docker中”揭露“和”发布“之间的区别 ”。

另请参阅“ 使用Docker的高级用例:连接容器 ”的示例

http://codentrick.com/home/wp-content/uploads/2015/07/Docker_Linking_Dual-640x480.jpg


确保虽然该IP是正确的( $(docker-machine ip default) )。


如果您使用虚拟机(即,您不是直接在Linux主机上使用Docker,而是在具有VirtualBox的Linux虚拟机上),请确保映射端口7474和8000是从主机转发到VM的端口 。

 VBoxManage controlvm boot2docker-vm natpf1 "name,tcp,,7474,,7474" VBoxManage controlvm boot2docker-vm natpf1 "name,tcp,,8000,,8000" 

在OP的情况下,这是使用neo4j:基于neo4j / neo4j /图像和它的Dockerfile :参见“ 与Docker的Ne​​o4j :

 ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["neo4j"] 

它并不意味着用于安装另一个服务(如nodejs),其中CMD cd linkurious.js && npm start将完全覆盖neo4j基本映像CMD (意味着neo4j永远不会启动)。

这意味着要自己运行:

 # interactive with terminal docker run -i -t --rm --name neo4j -v $HOME/neo4j-data:/data -p 8474:7474 neo4j/neo4j # as daemon running in the background docker run -d --name neo4j -v $HOME/neo4j-data:/data -p 8474:7474 neo4j/neo4j 

然后由另一个图像使用--link neo4j:neo4j指令。