我有个sharelatex容器在运行。这个码头组合文件包含一个mongo和redis容器。
这是sharelatex码头组合
version: '2'
services:
sharelatex:
restart: always
image: rigon/sharelatex-full
#image: sharelatex/sharelatex
container_name: sharelatex
networks:
- test-network
depends_on:
- mongo
- redis
privileged: true
links:
- mongo
- redis
volumes:
- ./sharelatex_data:/var/lib/sharelatex
- /var/run/docker.sock:/var/run/docker.sock
environment:
SHARELATEX_MONGO_URL: mongodb://mongo/sharelatex
SHARELATEX_REDIS_HOST: redis
SHARELATEX_APP_NAME: ShareLaTeX
SHARELATEX_SITE_URL: https://latex.tkwant.de
mongo:
restart: always
image: mongo
container_name: mongo
expose:
- 27017
volumes:
- ./mongo_data:/data/db
networks:
- test-network
redis:
restart: always
image: redis
container_name: redis
networks:
- test-network
expose:
- 6379
volumes:
- ./redis_data:/data
networks:
test-network:
external: true我也想创建一个需要mongodb的节点应用程序。如何连接这两个集装箱?我读过关于网络的文章,试过了码头网络,但没有成功。
这是我的节点对接器组成
version: '3.5'
services:
app:
container_name: app
restart: always
build: .
ports:
- '3001:3000'
networks:
- test-network
networks:
test-network:
driver: external我的index.js
// Connect to MongoDB
mongoose
.connect(
'mongodb://mongo:27017/test2',
{ useNewUrlParser: true }
)
.then(() => console.log('MongoDB Connected'))
.catch(err => console.log("errorErrorError"));我愿意接受所有答案..。在自己的容器中运行mongo或创建一个码头网络。但是我不知道什么是最好的还是最容易的。
更新1:
第一个问题: Sharelatex不再工作了--> sharelatex现在在另一个网络中。我的nginx反向代理不再找到sharelatex容器了。第二个问题是:当我想启动节点对接器时,我得到了这个错误(不知道为什么,但它想创建一个新的网络):使用驱动程序“外部”错误创建网络"dockernodemongo_test- network“:插件”外接“未找到。
发布于 2018-11-24 09:55:30
你可以试试这样的东西。
创建一个码头网络,如下所示。
docker network create <NETWORK_NAME>在sharelatex组合中,可以添加这个网络(测试网络是网络的名称),如下所示
services:
mongo:
restart: always
image: mongo
container_name: mongo
networks:
- test-network
expose:
- 27017
volumes:
- ./mongo_data:/data/db
networks:
test-network:
external: true同样,您也可以在您的节点应用程序的停靠器组合文件中执行相同的操作(使用相同的网络名称)。
一旦两个容器都在同一个网络中,您就可以使用容器名称作为主机名来连接到它。
此外,还可以使用以下命令验证容器是否在同一网络中运行
docker network <NETWORK_NAME> inspectP.S.
发布于 2018-11-29 20:40:41
好的,看起来您在这两个实例上都指定了一个自定义网络,但实际上并没有给它们命名。标题测试-网络只能用于在同一文件中引用它。
networks:
test-network:
external: true这将有效地创建一个自定义网络,但是如果没有指定的名称,它就会创建一个默认的projectname_test-network名称。您实际上是在使用projectname_test-network创建两个不同的网络,这就是它试图创建一个"dockernodemongo_test- network“网络的原因。
在节点停靠-组合中,您可以尝试:
networks:
test-network:
external:
name: [sharelatexname]_test-network这将有效地搜索具有该名称的预先存在的网络。或者,您可以从创建的第一个实例中命名网络,这样可以省去试图找出名称的麻烦。
sharelatex码头-组成:
networks:
test-network:
name: test-network
external: true节点对接器-组成:
networks:
test-network:
external:
name: test-network至于为什么它不创建节点网络;“驱动程序:”您没有现有的插件,称为‘外部’,有一些内置的驱动程序,增加了许多功能(例如多主机)到您的网络,如桥,覆盖和macvlan。您还可以下载其他自定义插件。不过,我不认为你需要这些来完成你想要完成的任务。另外,由于您只使用一个网络,服务中的所有“网络:”实例都是不必要的。它们都将成为唯一指定网络的一部分。“网络:”将是有用的,如果您有多个网络在同一码头-组成,并希望隔离/命名网络中的特定服务。
发布于 2018-11-21 14:44:46
你可以试试这个。
version: '2'
services:
mongo: // declare first
restart: always
image: mongo
container_name: mongo
expose:
- 27017
volumes:
- ./mongo_data:/data/db
redis: // declare first
restart: always
image: redis
container_name: redis
expose:
- 6379
volumes:
- ./redis_data:/data
sharelatex:
restart: always
image: rigon/sharelatex-full
#image: sharelatex/sharelatex
container_name: sharelatex
depends_on:
- mongo
- redis
privileged: true
links:
- mongo:mongo // added :mongo
- redis:redis // added :redis
volumes:
- ./sharelatex_data:/var/lib/sharelatex
- /var/run/docker.sock:/var/run/docker.sock
environment:
SHARELATEX_MONGO_URL: mongodb://mongo/sharelatex
SHARELATEX_REDIS_HOST: redis
SHARELATEX_APP_NAME: ShareLaTeX
SHARELATEX_SITE_URL: https://latex.tkwant.de如果您在尝试链接到它们之后声明了mongo和redis,那么docker就不会知道它的存在。
来源:https://docs.docker.com/compose/compose-file/#links
确实注意到官方文档声明:--link标志是Docker的遗留特性。它最终可能会被移除。除非您绝对需要继续使用它,否则我们建议您使用用户定义的网络来促进两个容器之间的通信,而不是使用--link。
https://stackoverflow.com/questions/53413361
复制相似问题