gpt4 book ai didi

Docker swarm 容器连接问题

转载 作者:行者123 更新时间:2023-12-02 20:04:29 25 4
gpt4 key购买 nike

我正在尝试使用 docker swarm 创建简单的 nodejs 服务,该服务位于 Haproxy 后面并连接到 mysql。所以,我创建了这个 docker compose 文件:

我有几个问题:

  • 后端服务无法使用:localhost 或 127.0.0.1 连接到数据库,因此,我设法使用数据库容器的私有(private) ip(10.0.1.4) 连接到数据库。
  • 即使它依赖于它,后端也会过早地尝试连接到数据库。
  • 无法从外部访问该应用程序。


  •     version: '3'

    services:
    db:
    image: test_db:01
    ports:
    - 3306
    networks:
    - db

    test:
    image: test-back:01
    ports:
    - 3000
    environment:
    - SERVICE_PORTS=3000
    - DATABASE_HOST=localhost
    - NODE_ENV=development
    deploy:
    replicas: 1
    update_config:
    parallelism: 1
    delay: 5s
    restart_policy:
    condition: on-failure
    max_attempts: 3
    window: 60s
    networks:
    - web
    - db
    depends_on:
    - db
    extra_hosts:
    - db:10.0.1.4

    proxy:
    image: dockercloud/haproxy
    depends_on:
    - test
    environment:
    - BALANCE=leastconn
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    ports:
    - 80:80
    networks:
    - web
    deploy:
    placement:
    constraints: [node.role == manager]

    networks:
    web:
    driver: overlay
    db:
    driver: bridge


    我正在运行以下内容:
    docker stack deploy --compose-file=docker-compose.yml prod

    所有服务都在运行。
    curl http://localhost/api/test <-- Not working

    但是,正如我上面提到的我遇到的问题。
    Docker version 18.03.1-ce, build 9ee9f40
    docker-compose version 1.18.0, build 8dd22a9

    我错过了什么?

    最佳答案

    The backend service can't connect to the database using: localhost or 127.0.0.1, so, I managed to connect to the database using the private ip(10.0.1.4) of the database container.



    不要使用 IP 地址进行连接。仅使用 DNS 名称。
    因此,您必须将连接更改为 DATABASE_HOST=db ,因为这是您定义的服务名称。
    本地主机是错误的,因为该服务与您的 test 在不同的容器中运行服务。

    The backend tries to connect to the database too soon even though it depends on it.


    depends_on没有按您的预期工作。请阅读 https://docs.docker.com/compose/compose-file/#depends_on和信息框 "There are several things to be aware of when using depends_on:"TL;DR: depends_on使用版本 3 Compose 文件以 swarm 模式部署堆栈时忽略该选项。

    The application can't be reached from outside.



    您必须为 http://test:3000 请求的 haproxy 配置在哪里?当某事在 /api/test 上请求 haproxy 时?

    关于Docker swarm 容器连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50987704/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com