我正在尝试使用docker堆栈部署来部署节点应用程序。我想这应该是显而易见的,但是如何从节点应用程序连接到数据库呢?
这是我的样例对接文件-我还没有解决缩放每个服务,只是试图连接所有。给定这个文件,如果我docker stack deploy --compose-file docker-compose.yml dev -那么连接字符串连接节点到mongo的正确mongo地址是什么?
version: '3'
services:
node:
image: rgilling/rsc:latest
ports:
- "8080:8080"
networks:
- "core"
- "front"
logging:
driver: "json-file"
options:
max-size: "500k"
max-file: "10"
db1:
image: mongo:latest
ports:
- "27017:27017"
command: mongod
networks:
- core
logging:
driver: "json-file"
options:
max-size: "500k"
max-file: "10"
search1:
image: docker.elastic.co/elasticsearch/elasticsearch:5.3.0
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
cap_add:
- IPC_LOCK
volumes:
- ../../elastic/config/search1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ../../elastic/config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties
- ../../elastic/logs/search1:/usr/share/elasticsearch/logs/search1
- ../../elastic/data/search1:/usr/share/elasticsearch/data/search1
ports:
- 9200:9200
networks:
- core
logging:
driver: "json-file"
options:
max-size: "500k"
max-file: "2"
kibana:
image: docker.elastic.co/kibana/kibana:5.3.0
hostname: test-rep
volumes:
- ../../kibana/config/systest.yml:/usr/share/kibana/config/kibana.yml
networks:
- core
ports:
- "5601:5601"
depends_on:
- search1
logging:
driver: "json-file"
options:
max-size: "500k"
max-file: "10"
mail:
image: mailhog/mailhog
hostname: test-mail
networks:
- core
ports:
- "8025:8025"
- "1025:1025"
logging:
driver: "json-file"
options:
max-size: "500k"
max-file: "10"
networks:
core:
driver: overlay
front:
driver: overlay 发布于 2017-04-18 14:31:23
docker将为每个容器创建一个网络访问名称。在您的例子中,它将是db1。
mongodb://user:password@db1/my-database
您还可以将一个links部分添加到您的停靠-组合中,它允许您指定要映射到db1的名称。
https://docs.docker.com/compose/compose-file/#links
node:
links:
- db1:mongo-server-name通常情况下,最好添加links部分,这样停靠者就可以知道哪些容器应该相互连接。
node:
links:
- db1在这种情况下不需要重命名。只需指定node连接到的容器
发布于 2017-08-22 16:03:54
上面的答案实际上是错误的,在docker堆栈部署中不支持links:,请参阅下面的链接:https://docs.docker.com/compose/compose-file/#not-supported-for-docker-stack-deploy
您可以通过在群集中使用链接容器的服务名称连接到另一个容器,假设两个服务mysql_service和java_service正在群集中运行,然后在java_service容器内尝试ping mysql_service以验证它是否已连接
也可以使用别名为网络中的服务使用可选主机名。
发布于 2018-03-06 07:39:42
如果您通过docker stack deploy运行app --一个服务的所有容器都可以看到对方。
因此,要想连接到DB,只需编写:
db1:27017
(其中db1 -是您的DB容器名称)
https://stackoverflow.com/questions/43473715
复制相似问题