可以从docker容器exec命令中访问URL,但Angular应用程序获取ERR_CONNECTION_TIMED_O



在Docker容器中通过Angular应用程序访问Python/Flask后端时出现问题。这是在Ubuntu EC2实例中完成的。当我使用exec命令sh到Angular容器时,我能够成功地使用docker内部主机url:访问url

curl http://172.17.0.1:5000/employees/getAll 

URL调用Flask服务来获取数据。但是,当通过同一容器上的Angular应用程序进行相同的调用时,我会得到一个未知错误:

core.js:5828 ERROR 
HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "http://172.17.0.1:5000/employees/getAll", ok: false, …}
error: ProgressEvent {isTrusted: true, lengthComputable: false, loaded: 0, total: 0, type: "error", …}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, headers: Map(0)}
message: "Http failure response for http://172.17.0.1:5000/employees/getAll: 0 Unknown Error"
name: "HttpErrorResponse"
ok: false
status: 0
statusText: "Unknown Error"
url: "http://172.17.0.1:5000/employees/getAll"
__proto__: HttpResponseBase

Docker Compose:

version: '3'
services:      
angular:
build: 
context: ./angular-cluster/
# volumes:
#         - ./angular-cluster/:/app
ports:
- 80:4200
cluster-db:
build:
context: ./cluster-db/
network_mode: "host"
ports:
- 5000:5000
volumes:
- ./cluster-db/:/app
environment:
FLASK_APP: app.py
FLASK_ENV: development

Angular Dockerfile

# base image
FROM node:latest
ADD . /app
WORKDIR /app
# add app
COPY . /app
ENV PATH ./node_modules/.bin:$PATH
RUN npm install
RUN npm install -g @angular/cli@7.3.9

EXPOSE 4200
# start app
CMD ng serve --host 0.0.0.0 --disable-host-check

Python/Flask Dockerfile

FROM python:3.7
ADD . /app
WORKDIR /app
ENV PATH=$PATH:/app
ENV PYTHONPATH /app
#COPY . .
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0"]

Angular应用程序运行到浏览器中。因此,您处于容器外部。您必须从Angular应用程序向运行容器的IP发出请求。例如,如果您在PC中运行docker,则请求必须为http://localhost:5000/employees/getAll.

希望这能帮助到你。

最新更新