Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与docker compose联网中容器的链接_Docker_Url_Networking_Docker Compose - Fatal编程技术网

与docker compose联网中容器的链接

与docker compose联网中容器的链接,docker,url,networking,docker-compose,Docker,Url,Networking,Docker Compose,我的目标是使用docker compose通过URL从另一个容器访问一个容器 因此,假设我有以下docker compose.yml文件 version: "3.8" services: web: build: web ports: - "8000:8000" depends_on: - db db: image: postgres ports: - "8001:

我的目标是使用docker compose通过URL从另一个容器访问一个容器

因此,假设我有以下
docker compose.yml
文件

version: "3.8"
services:
  web:
    build: web
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres
    ports:
      - "8001:5432"
以及文件夹
web

FROM alpine:3.7
RUN ping postgres://db:5432
运行
docker compose build
返回

db uses an image, skipping
Building web
Step 1/2 : FROM alpine:3.7
 ---> 6d1ef012b567
Step 2/2 : RUN ping postgres://db:5432
 ---> Running in afbfcd27b340
ping: bad address 'postgres://db:5432'
Service 'web' failed to build : The command '/bin/sh -c ping postgres://db:5432' returned a non-zero code: 1
docker中用于联网的文档( )国家:

现在,每个容器都可以查找主机名web或db并返回相应容器的IP地址。例如,web的应用程序代码可以连接到URLpostgres://db:5432 并开始使用Postgres数据库


连接到从服务数据库获得的容器的正确URL是什么?

web
映像生成期间,您的
db
容器不存在,因此此处使用RUN是不正确的

一个选项是在Dockerfile中包含CMD命令,它将在每次启动容器时指示
web
容器运行
ping
命令

此外,我还调整了传递给
ping
命令的参数

因此,
web
Dockerfile将是:

FROM alpine:3.7

CMD ["ping", "db:5432"]
现在,在
docker compose build
docker compose up
之后,您将看到
web
容器ping第5432部分上的
db
容器并接收响应


docker compose
启动网桥网络,并将所有容器添加到此网络,以便它们可以相互通信。每个容器的主机名与docker compose文件中的服务名相同。主机名由内部DNS服务解析。

您无法从Dockerfile中连接到其他容器。(另外,
ping
使用非常低级的协议ICMP发送数据包,并且根本不理解URL。)