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

时间:2017-04-18 13:32:56

标签: docker docker-compose

我尝试使用docker stack deploy来部署节点应用。这应该是显而易见的,但我如何从节点应用程序连接到数据库?

这是我的示例泊坞文件 - 我还没有解决扩展每个服务的问题,只是尝试连接所有内容。给定此文件,如果我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 

3 个答案:

答案 0 :(得分:0)

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

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

或者您可以使用别名为网络中的服务提供备用主机名

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

答案 1 :(得分:0)

如果您通过docker stack deploy运行应用程序 - 一个服务的所有容器都可以看到对方。

因此,对于您连接到数据库的情况,您应该写:

db1:27017

(其中db1 - 是您的数据库容器名称)

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

答案 2 :(得分:-3)

docker将为每个容器创建一个网络可访问的名称。在你的情况下,它将是ControllerTwo

db1

您还可以在docker-compose中添加mongodb://user:password@db1/my-database部分,以便您指定要映射到links的名称。

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

db1

通常最好添加 node: links: - db1:mongo-server-name 部分,因此docker知道哪些容器应该相互连接。

links

在这种情况下无需重命名。只需指定 node: links: - db1 连接到

的容器