问题描述
我对Docker Compose有一个初学者的问题。我正在尝试从docker-compose-slim.yml
example file扩展Zipkin GitHub repository。
我需要对其进行更改,以便它可以包含我编写的一个简单的FastAPI应用程序。不幸的是,我无法使它们彼此连接。 FastAPI尝试将POST请求发送到Zipkin容器时会被拒绝,即使它们都使用YAML文件中定义的显式链接和端口映射连接到同一网络。但是,我可以从主机连接到这两个服务器。
能告诉我我做错了什么吗?
以下是错误消息:
Error emitting zipkin trace. ConnectionError(MaxRetryError("httpconnectionPool(host='127.0.0.1',port=9411): Max retries exceeded with url: /api/v2/spans (Caused by NewConnectionError('<urllib3.connection.httpconnection object at 0x7fce354711c0>: Failed to es
tablish a new connection: [Errno 111] **Connection refused**'))"))
这是Docker Compose YAML文件:
version: '2.4'
services:
zipkin:
image: openzipkin/zipkin-slim
container_name: zipkin
environment:
- STORAGE_TYPE=mem
ports:
# Port used for the Zipkin UI and HTTP Api
- 9411:9411
depends_on:
- storage
storage:
image: busyBox:1.31.0
container_name: fake_storage
myfastapi:
build: .
ports:
- 8000:8000
links:
- zipkin
depends_on:
- zipkin
dependencies:
image: busyBox:1.31.0
container_name: fake_dependencies
networks:
default:
name: foo_network
这是Dockerfile:
FROM python:3.8.5
ADD . /app
workdir /app
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["uvicorn","wsgi:app","--host","0.0.0.0","--port","8000"]
解决方法
您必须告诉容器网络“ foo_network”。外部标志表示无法从外部访问容器。当然,您不必打赌,但是我认为举个例子可能很好。
由于“链接”功能,请看这里Link
version: '2.4'
services:
zipkin:
image: openzipkin/zipkin-slim
container_name: zipkin
environment:
- STORAGE_TYPE=mem
ports:
# Port used for the Zipkin UI and HTTP Api
- 9411:9411
depends_on:
- storage
networks:
- foo_network
storage:
image: busybox:1.31.0
container_name: fake_storage
networks:
- foo_network
myfastapi:
build: .
ports:
- 8000:8000
links:
- zipkin
depends_on:
- zipkin
networks:
- foo_network
dependencies:
image: busybox:1.31.0
container_name: fake_dependencies
networks:
- foo_network
networks:
foo_network:
external: false