在另一个容器中运行容器意味着在Docker容器中运行Docker引擎.这被称为Docker-in-Docker的dind,我强烈反对它.你可以在线搜索’dind’并发现为什么在大多数情况下这是一个坏主意,但由于它不是你问题的主要对象,我不会进一步扩展这个主题.
在同一容器中运行node.js进程和neo4j进程
虽然大多数人会告诉你不要在Docker容器中运行多个进程,但没有什么能阻止你这样做.如果您想要遵循此路径,请查看Docker文档网站上的Using Supervisor with Docker或Phusion baseimage Docker镜像.
请注意,这种做事方式会使Docker镜像越来越难以维护.
链接容器
正如您所发现的那样,保持Docker图像尽可能简单(即:在Docker容器中运行一个且只有一个应用程序)将使您的生活更加轻松.
当两个容器在同一个Docker引擎上运行时,将容器链接在一起是微不足道的.这只是一个问题:
>让你的neo4j容器expose服务器监听它的端口
>使用–link< neo4j容器名称>运行node.js容器:< alias>选项
>在node.js应用程序配置中,将neo4j主机设置为< alias> hostname,docker将负责将该连接转发到它分配给neo4j容器的IP
如果要在不同的主机上运行这两个容器,事情会变得更加困难.
使用Docker Compose,您必须使用link:键来定义链接
新的Docker网络功能
您还发现将来不再支持链接容器,并且使多个Docker容器进行通信的新方法是创建虚拟网络并将这两个容器附加到该网络.
以下是如何继续:
docker network create mynet
docker run --detach --