运行2项服务

时间:2015-10-23 04:46:09

标签: neo4j docker

我根据neo4j数据库集线器中已有的映像为github的Linkurious项目构建映像。 neo映像自动在端口7474上运行服务器,我的映像在端口8000上运行。

当我运行我的图像时,我发布了两个端口(我可以使用EXPOSE吗?):

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

但只有我的服务器似乎运行。如果我点击http://[ip]:7474/我什么都没得到。我有什么特别的事要做以确保它们都能运行吗?

*编辑I *

这是我的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 *

或许有助于解释我的困惑,我已经问过a different question

1 个答案:

答案 0 :(得分:3)

EXPOSE允许使用docker run --link选项进行容器间通信(在同一个docker守护程序中)。
端口映射用于将EXPOSEd端口映射到主机,以允许客户端到容器的通信。所以你需要--publish

另请参阅“Difference between “expose” and “publish” in docker”。

另请参阅“Advanced Usecase with Docker: Connecting Containers

的示例

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

确保ip是正确的($(docker-machine ip default))。

如果您正在使用VM(意味着您不是直接在Linux主机上使用docker,而是在使用 VirtualBox 的Linux VM上),请确保映射端口7474和8000为{{ 3}}

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

在OP的情况下,这是使用neo4j:请参阅“port forwarded from the host to the VM”,基于Neo4j with Docker图片和neo4j/neo4j/

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指令。