我对Docker来说还很陌生,我正在尝试将Flask-App容器化。应用程序+ gunicorn的容器工作正常,我可以访问该网站。但是,当我使用docker-compose包含Nginx容器时,我无法再连接到该站点了。
我的文件:
Dockerfile(Flask):
db.countries.aggregate({$unwind:'$data.country.neighbor.name'})
Dockerfile(Nginx)
FROM python:3.7-stretch
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "-b", "127.0.0.1:8080", "app:app"]
nginx.conf
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/
还有docker-compose.yml
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080/;
}
location /static {
alias /var/www-data;
}
}
当我使用docker-compose up --build运行容器时,一切似乎都工作正常:
version: "3.7"
services:
flask:
build: ./flask
container_name: flask_cookbook
restart: always
environment:
- APP_NAME=Cookbook
expose:
- 8080
nginx:
build: ./nginx
container_name: nginx_cookbook
restart: always
ports:
- "80:8080"
但是当我转到127.0.0.1:8080时,没有任何连接。
我真的找不到错误,我可能在某个地方犯了错误...
其他信息: 我在Windows 10上
我的目录如下
Starting nginx_cookbook ... done
Starting flask_cookbook ... done
Attaching to nginx_cookbook, flask_cookbook
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Starting gunicorn 19.9.0
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Listening at: http://127.0.0.1:8080 (1)
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Using worker: sync
flask_cookbook | [2019-07-18 15:19:37 +0000] [8] [INFO] Booting worker with pid: 8
答案 0 :(得分:0)
感谢@ShawnC。 ,我解决了问题。引用他:
您有一些问题。 A)您是代理,将nginx传递到与nginx侦听相同端口的本地主机,所以这是行不通的。您需要向烧瓶容器发出请求。
因此我将nginx.conf文件中的侦听端口更改为80(从8080),并将docker-compose.yml的nginx部分中的端口更改为80:80(从80:8080)
B)从您的机器向127.0.0.1:8080发出请求,因为没有Docker容器正在侦听,因此无法正常工作。您的配置说nginx应该使用端口80,它将映射到容器中的8080。所以您应该只向127.0.0.1:80
发出请求
因此,我将nginx.conf中的代理密码更改为flask_cookbook:8080。因此,容器名称以及flask_app的公开端口。这样,nginx容器可以向烧瓶容器发出请求。
我还必须将flask-Dockerfile中的gunicorn绑定更改为0.0.0.0:8080,因此我可以使用Localhost / 127.0.0.1连接到nginx容器。
现在它可以工作了,我可以在localhost:80上连接到我的网站。