我在 ubuntu 上拉取并构建了一个 docker 容器,以在 Web 服务器上运行。该容器本质上是一个需要从同一服务器上的另一个应用程序调用的 API。
这是我的 DockerFile
FROM ubuntu:20.04
RUN apt update
RUN apt install -y python3-pip
# Install Dependencies
COPY requirements.txt .
RUN pip3 install --no-cache-dir -r requirements.txt
COPY search_api.py .
COPY search/ search
ENV DEBUG 0
CMD [ "gunicorn", "--workers", "2", "--threads", "1", "-b", "0.0.0.0:5050", "--timeout", "400", "search_api:app"]
这是我的 yml 文件
version: '3.1'
services:
engine:
image: engine:0
restart: always
ports:
- 5050:5050
当容器运行时,它声称位于 0.0.0.0 的端口 5050 上
0.0.0.0:5050->5050/tcp
因为我试图从主机服务器外部访问 docker 容器,所以似乎无法将实际的 docker 容器映射到主机 5050 端口,而是转到 172.17.0.1:5050。我想知道是否有任何方法可以将 docker 容器一直推送到主机端口
奇怪的是,当我执行 netstat -tulpn 时,我得到了这个
tcp6 0 0 :::5050 :::* LISTEN 2487/docker-proxy-c
因此,端口 5050 代理到 Docker,但如果我执行 localhost:5050,为什么它不会将我带到 docker 容器?根据我迄今为止测试的所有内容,如果我 curl localhost:5050,它会抛出 curl (56) 错误。当我从 docker0 curl 172.17.0.1 时,我得到了我想要的结果。有没有办法重新配置 docker 容器以使其指向 localhost?
编辑:卷曲错误
[root@host etc]# curl localhost:5050
curl: (56) Recv failure: Connection reset by peer
[root@host etc]# curl -4 localhost:5050
curl: (56) Recv failure: Connection reset by peer