如何配置部署为docker容器的应用程序来引用在其他容器中运行的组件?我有一个需要postgresql的节点应用程序。我有一个节点配置文件,其中包含postgres的所有连接信息。在非docker部署中,您只需设置所需的配置值(例如,数据库服务器的IP地址等),但如何在docker部署中完成此操作?
我正在使用Docker Compose,但无法看到我如何找到postgres docker容器的必要IP地址,然后在我的node.js配置中设置该值。
答案 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"
}
}
} ...