【发布时间】:2021-08-27 17:01:15
【问题描述】:
在运行docker compose up 时,我试图在我的本地机器上测试一个简单的服务器端点,但以这种方式运行 docker 时,端口似乎没有暴露。如果我只是执行docker build 和docker run,我可以使用 localhost 来获得成功的端点调用,但当我使用我的 docker compose 文件时则不行。
docker-compose.yml 文件:
version: '3'
services:
simple:
build:
context: .
dockerfile: Dockerfile
container_name: simple
ports:
- 3000:80
environment:
- SOMEKEY=ABCD
- ANOTHERKEY=EFG
Dockerfile
FROM python:3.9.5
ARG VERSION
ARG SERVICE_NAME
ENV PYTHONPATH=/app
COPY requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
COPY app /app/app
COPY main.py /app/
CMD ["python", "./app/main.py"]
然后是我的 main.py 文件
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
if __name__ == '__main__':
uvicorn.run(app, port=3000, host="0.0.0.0")
docker compose up 似乎不想暴露给本地主机。
我在构建和运行中使用的确实暴露了:
docker build -t test-test .
docker run -p 3000:3000 test-test
有没有办法使用docker compose up 将端口公开给本地主机?
【问题讨论】:
-
在 docker compose 中端口应该是 80:3000。