neo4j - 运行2个服务

标签 neo4j docker

我正在为 github 的 Linkurious 项目构建一个图像,该图像基于 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 *

也许为了帮助解释我的困境,我问了 a different question

最佳答案

EXPOSE 允许容器间通信(在同一个 docker 守护进程内),使用 docker run --link 选项。
端口映射用于将 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 为 port forwarded from the host to the VM

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

在OP的例子中,这是使用neo4j:参见“Neo4j with Docker”,基于neo4j/neo4j/图像和its Dockerfile:

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

关于neo4j - 运行2个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295052/

相关文章:

docker - 运行 docker-compose up 命令时出现错误 "Source Path has too many colons ",未在 compose 文件中指定任何安装路径

linux - 在linux中,echo和pipe如何与docker一起工作?

docker - 如何在Teamcity中的Agent checkout文件夹之外设置工件路径?

django - celery worker 无法使用 Django 连接到 dockerized redis 实例

Neo4j/正则表达式 : Cypher string REPLACE() replacing string segment only to end or beginning of string

java - Neo4j 可视化和检索数据

java - Neo4j 节点链接

Docker 从缓存中构建已删除的模块

neo4j - 匹配中的多个标签非常慢?

neo4j - 如何向neo4j图形数据库添加唯一数据