【问题标题】:localhost using docker compose up not working使用 docker compose up 的 localhost 不起作用
【发布时间】:2021-08-27 17:01:15
【问题描述】:

在运行docker compose up 时,我试图在我的本地机器上测试一个简单的服务器端点,但以这种方式运行 docker 时,端口似乎没有暴露。如果我只是执行docker builddocker 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。

标签: python docker fastapi


【解决方案1】:

端口的语法是 HOST:CONTAINER。容器上的端口是 3000,所以你倒过来了。

version: '3'
  services:
    simple:
     build:
      context: .
      dockerfile: Dockerfile
    container_name: simple
    ports:
      - 80:3000
    environment:
      - SOMEKEY=ABCD
      - ANOTHERKEY=EFG

【讨论】:

  • 太棒了!我犯了一个愚蠢的错误......谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
相关资源
最近更新 更多