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

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

我使用的是Docker Compose,但是看不到如何findpostgres docker容器的必要IP地址,然后在我的node.jsconfiguration中设置该值。

你不需要得到IP。

您可以通过使用“服务”名称而不是ip来从同一环境中的另一个容器(相同的Docker撰写)伸出容器。

创build一个dockernetworking。 当您不使用默认networking时,您将获得一个DNS服务器,您可以使用该服务器来parsing其他容器的 – 名称。

使用域名

要连接到您的应用程序,您不需要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

在你的configuration文件中你应该使用在这种情况下:

 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检查部分NetworkSettings有关键的networking。 你应该寻找IPAddress。 还有别名,你可以find别名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" } } } ...