如何在Docker堆栈部署中连接到容器

我试图使用docker堆栈部署来部署一个节点的应用程序。 这应该是显而易见的,但我怎么连接到节点应用程序的数据库?

这是我的示例docker文件 – 我还没有解决缩放每个服务,只是试图连接的一切。 鉴于此文件,如果我docker stack deploy --compose-file docker-compose.yml dev – 那么什么是连接string连接节点到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 

docker工人将为每个容器创build一个networking可访问的名称。 在你的情况下,这将是db1

mongodb://user:password@db1/my-database

你也可以添加一个links部分到你的docker-compose,它允许你指定一个名字映射到db1

https://docs.docker.com/compose/compose-file/#links

 node: links: - db1:mongo-server-name 

通常最好是添加links部分,所以docker知道哪个容器应该连接到对方。

 node: links: - db1 

在这种情况下不需要重命名。 只需指定node连接的容器

以上答案实际上是错误的links:不支持在docker stack deploy中看到这个链接: https : //docs.docker.com/compose/compose-file/#not-supported-for-docker-stack-deploy

你可以通过在swarm中使用链接容器的服务名称连接到另一个容器,假设两个服务mysql_service和java_service在swarm中运行,然后在java_service容器内尝试ping mysql_service来validation它是否连接

或者您可以使用别名在networking中为服务提供备用主机名

https://docs.docker.com/compose/compose-file/#aliases