在docker容器中配置应用程序以访问其他容器

时间:2017-06-28 09:48:44

标签: node.js docker docker-compose dockerfile

如何配置部署为docker容器的应用程序来引用在其他容器中运行的组件?我有一个需要postgresql的节点应用程序。我有一个节点配置文件,其中包含postgres的所有连接信息。在非docker部署中,您只需设置所需的配置值(例如,数据库服务器的IP地址等),但如何在docker部署中完成此操作?

我正在使用Docker Compose,但无法看到我如何找到postgres docker容器的必要IP地址,然后在我的node.js配置中设置该值。

3 个答案:

答案 0 :(得分:0)

创建一个泊坞网络。当您不使用默认网络时,您将获得一个DNS服务器,您可以使用该服务器解析其他容器的--name名称。

答案 1 :(得分:0)

您无需获取IP。

您可以使用" service"从同一环境中的另一个容器(相同的Docker Compose)中找到容器。名称而不是IP。

答案 2 :(得分:0)

使用域名

要连接到您的应用程序,您不需要IP,只需要容器名称。

我将尝试在下面的例子中解释它。

如果您有例如docker-compose文件如下:

version: '2'
services:
  web:
    build: docker/web
    ports:
      - "8080:8080"
    links:
      - dbpostgres 
    volumes:
      - .:/var/www/html   # I will share my code so I map this path
  dbpostgres: <-- CONTAINER NAME
    image: postgres
    volumes:
      - /private/var/lib/postgresql:/var/lib/postgresql
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: pguser
      POSTGRES_PASSWORD: pguser
      POSTGRES_DB: pgdb

并且您想要连接到postgres数据库,您需要做的就是使用容器名称而不是IP地址。这里dbpostgres

在配置文件中,您应该使用以下情况:

parameters:
    database_host: dbpostgres <-- CONTAINER NAME
    database_port: null
    database_name: dbname
    database_user: dbuser
    database_password: pass

使用IP

如果您不想使用域名,并且想要使用IP(我不知道原因),您可以使用命令:

docker inspect project_dbpostgres_1

其中project_dbpostgres_1是您的容器名称。您可以使用docker ps检查容器名称。

网段设置中的docker-inspect具有关键网络。你应该寻找IPAddress。还有别名,你可以在其中找到别名dbpostgres。

 ... "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "7005a7782180462e31e526aa9a5ad89e1943230d57c33930c9f7de26f3917157",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "9000/tcp": null
        },
        "SandboxKey": "/var/run/docker/netns/7005a7782180",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "i2mv3_default": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": [
                    "31b7550ecd14",
                    "dbpostgres"
                ],
                "NetworkID": "e1a954361a2a325cac15405135d67e716dff4c15ea10d402948bf7dff329c1fa",
                "EndpointID": "9b2ad968df4e55750fe1d1730e33fafa5512012b1669df97d838abf0f25fa506",
                "Gateway": "172.18.0.1",
                "IPAddress": "172.18.0.2", <---- YOUR IP
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:12:00:02"
            }
        }
    }  ...