【发布时间】:2021-10-01 16:35:47
【问题描述】:
我有 2 个容器,分别命名为 flask_server 和 nginx,当我使用 docker-compose 运行这些容器时,一切都按预期工作,问题是当我分别运行每个容器时,我得到了这个错误消息:
"host not found in upstream "flask_server:3000" in /etc/nginx/conf.d/nginx.conf".
我已经搜索了一个解决方案,我得出的结论是这是容器之间的网络问题。
所以当我像这样运行带有 --network 标志的容器时:
**flask_server**
docker run -p 3000:3000 --network custom-network flask_server
**nginx**
docker run -p 80:80 --network custom-network nginx
还是不行。
我让它工作的唯一方法是运行带有 --network-alias 标志的 flask_server 容器,如下所示:
**flask_server**
docker run -p 3000:3000 --network custom-network --network-alias flask_server flask_server
**nginx**
docker run -p 80:80 --network custom-network nginx
所以现在我遇到了另一个问题,即我想将这些容器上传到亚马逊 ecs,但我在任务定义中没有看到任何别名选项,所以我可能需要考虑另一种创造性的方式在我将这些容器上传到 ecs 之前解决这个问题。
nginx.conf
upstream flask_server {
server flask_server:3000;
}
server {
listen 80;
server_name default_server;
location /api {
proxy_pass http://flask_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
nginx Dockerfile
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
烧瓶 Dockerfile
FROM python
WORKDIR /app
COPY ./requirements.txt /app
RUN pip install -r requirements.txt
COPY . .
RUN apt-get update
RUN apt-get install python3-dev -y
WORKDIR /app/code
EXPOSE 3000
CMD ["gunicorn", "wsgi:app", "-k gevent" ,"-w 3", "-b 0.0.0.0:3000", "-t 30"]
希望这里的任何人有另一种解决方法来解决容器之间的网络问题,或者在 Amazon ECS 上使用 --network-alias 标志的方法。
任何帮助都会很棒。谢谢!
============ 编辑 ==============
所以我找到了解决这个问题的方法,我没有使用 flask_server 作为我的内部 ip 和代理传递给容器本身,而是使用主机 ip 并将请求直接传递给主机 ip。
请注意,这仅在 flask_server 容器在 nginx 之前运行时才有效,以便将请求转发到 nginx。
新建 nginx.conf 文件
server {
listen 80;
server_name default_server;
location /api {
# the host variable indicates the current host ip address
proxy_pass http://$host:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
【问题讨论】:
标签: amazon-web-services docker nginx amazon-ecs