0

我在 python 中有一个 swagger 服务器 api,我可以在我的电脑上运行,并通过 web 轻松访问用户界面。我现在正在尝试将此 API 运行到 docker 容器中并将其放入远程服务器中。在远程服务器中执行“docker run”命令后,一切似乎都工作正常,但是当我尝试连接时,我得到了 ERR_CONNECTION_REFUSED 响应。有趣的是,如果我进入容器,swagger 服务器正在工作并回答我的请求。

这是我的 Dockerfile:

FROM python:3
MAINTAINER Me
ADD . /myprojectdir
WORKDIR /myprojectdir
RUN pip install -r requirements.txt
RUN ["/bin/bash", "-c", "chmod 777 {start.sh,stop.sh,restart.sh,test.sh}"]

这是我构建/运行的命令:

sudo docker build -t mycontainer .
sudo docker run -d -p 33788:80 mycontainer ./start.sh

这是 start.sh 脚本:

#!/bin/bash

echo $'\r' >> log/server_log_`date +%Y%m`.dat
python3 -m swagger_server >> log/server_log_`date +%Y%m`.dat  2>&1

以及swagger服务器的主要.py:

#!/usr/bin/env python3

import connexion
from .encoder import JSONEncoder


if __name__ == '__main__':

    app = connexion.App(__name__, specification_dir='./swagger/')
    app.app.json_encoder = JSONEncoder
    app.add_api('swagger.yaml', arguments={'title': 'A title'})
    app.run(port=80, threaded=True, debug=False)

有谁知道为什么我无法访问 'myremoteserver:33788/myservice/ui' 以及为解决它需要改变什么。

提前致谢

4

1 回答 1

0

我终于设法找到了解决方案。需要告诉 connexion 的烧瓶服务器在 0.0.0.0 上运行,这样不仅允许本地连接,而且在 swagger.yaml 中更改带有 docker 容器所在服务器名称的 url

app.run(port=80, threaded=True, debug=False, host='0.0.0.0')
于 2017-04-19T08:53:36.537 回答