gpt4 book ai didi

docker-compose主机名以在容器之间通信与postgres一起使用,但不适用于app

转载 作者:行者123 更新时间:2023-12-04 18:00:27 26 4
gpt4 key购买 nike

我有以下docker-compose.yml:

services:
postgres:
image: "postgres:11.0-alpine"
app:
build: .
ports:
- "4000:4000"
depends_on:
- postgres
- nuxt
nuxt:
image: node:latest
ports:
- "3000:3000"

我需要 nuxt服务与 app进行通信。

nuxt服务( docker-compose run --rm --service-ports nuxt bash)中,如果我运行
root@62cafc299e8a:/app# ping postgres 
PING postgres (172.18.0.2) 56(84) bytes of data.
64 bytes from avril_postgres_1.avril_default (172.18.0.2): icmp_seq=1 ttl=64 time=0.283 ms
64 bytes from avril_postgres_1.avril_default (172.18.0.2): icmp_seq=2 ttl=64 time=0.130 ms
64 bytes from avril_postgres_1.avril_default (172.18.0.2): icmp_seq=3 ttl=64 time=0.103 ms

但是如果我这样做:
root@62cafc299e8a:/app# ping app     
ping: app: No address associated with hostname

为什么它适用于 postgres而不适用于 app

如果我执行 docker network inspect 4fcb63b4b1c9,它们似乎都在同一网络上:
[
{
"Name": "myapp_default",
"Id": "4fcb63b4b1c9fe37ebb26e9d4d22c359c9d5ed6153bd390b6f0b63ffeb0d5c37",
"Created": "2019-05-16T16:46:27.820758377+02:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"53b726bdd01159b5f18e8dcb858e979e6e2f8ef68c62e049b824899a74b186c3": {
"Name": "myapp_app_run_c82e91ca4ba0",
"EndpointID": "b535b6ca855a5dea19060b2f7c1bd82247b94740d4699eff1c8669c5b0677f78",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"62cafc299e8a90fd39530bbe4a6af8b86098405e54e4c9e61128539ffd5ba928": {
"Name": "myapp_nuxt_run_3fb01bb2f778",
"EndpointID": "7eb8f5f8798baee4d65cbbfe5f0f5372790374b48f599f32490700198fa6d54c",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
},
"9dc1c848b2e347876292650c312e8aaf3f469f2efa96710fb50d033b797124b4": {
"Name": "myapp_postgres_1",
"EndpointID": "a925438ad5644c03731b7f7c926cff095709b2689fd5f404e9ac4e04c2fbc26a",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "myapp",
"com.docker.compose.version": "1.23.2"
}
}
]

那为什么呢?也尝试使用别名,但没有成功。 :(

最佳答案

您的app容器很可能没有运行。它在docker network inspect中的出现表示该容器存在,但可以退出(即未运行)。您可以使用docker ps -a进行检查,例如:

$ docker ps -a
CONTAINER ID ... STATUS ... NAMES
fe908e014fdd Exited (0) Less than a second ago so_app_1
3b2ca418c051 Up 2 minutes so_postgres_1
  • 容器app存在但未运行:即使它存在于网络
  • 中,您也无法对其执行ping操作
  • 容器postgres存在并且正在运行:您将能够ping它

  • 可能是由于 docker-compose run --rm --service-ports nuxt bash 仅将创建并运行nuxt容器而不会运行apppostgres的事实所致。 您可以ping postgres,因为它在使用 docker-compose run nuxt bash之前已经在运行

    为了能够在运行 ping之后对其他容器进行 docker-compose run nuxt ...,您应该执行以下任一操作:
  • 之前已经有其他容器在运行(例如通过使用docker-compose up -d)
  • 使用其他容器depends_on尝试运行的容器,例如:
    nuxt:
    image: node:latest
    ports:
    - "3000:3000"
    # this will ensure posgres and app are run as well when using docker-compose run
    depends_on:
    - app
    - nuxt

  • 即使这样,您的容器也可能无法启动(或在启动后立即退出),并且您将无法对其执行ping操作。用 docker ps -a检查它是否正在运行,并用 docker logs检查它为什么退出。

    关于docker-compose主机名以在容器之间通信与postgres一起使用,但不适用于app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58817846/

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