首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  Docker

docker 新手求指导,应用 docker 化,但是数据库未 docker 化,容易出现应用和数据库连接的问题。

  •  
  •   autotesting · 231 天前 · 2746 次点击
    这是一个创建于 231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务实现方式:

    服务使用 flask + postgresql + gunicorn + supervisor + nginx 实现

    用 docker 部署时, 运行服务后,访问 api 时候,

    报错日志:

    File "/usr/local/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
        return connection._execute_clauseelement(self, multiparams, params)
      File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
        distilled_params,
      File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1248, in _execute_context
        e, statement, parameters, cursor, context
      File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
        util.raise_from_cause(sqlalchemy_exception, exc_info)
      File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 383, in raise_from_cause
        reraise(type(exception), exception, tb=exc_tb, cause=cause)
      File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
        cursor, statement, parameters, context
      File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
        cursor.execute(statement, parameters)
    OperationalError: (psycopg2.OperationalError) SSL SYSCALL error: EOF detected
    

    我已经搜索了报错OperationalError: (psycopg2.OperationalError) SSL SYSCALL error: EOF detected,但是没找到有效的解决办法。

    不知道有没有同学遇到过类似问题,可否分享一下解决思路?

    14 回复  |  直到 2019-04-16 14:12:28 +08:00
        1
    fishcg   231 天前
    OperationalError 异常一般是数据库连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等,是不是连接池大小的问题
        2
    autotesting   230 天前
    @fishcg 我没有单独指定连接池,我用的默认值,我看默认值 SQLALCHEMY_POOL_SIZE=5,按道理应该不是,我如果不用 docker 启动服务,直接命令行 gunicorn 启动服务,没有出现类似的数据库连接问题。
        3
    learningman   230 天前
    可以用 host 的网络模式试试
        4
    autotesting   229 天前
    @learningman 你好,我试了一下启动命令,我 docker 刚开始接触,我执行 docker run -t -i -d --net=host -p 80:80 --name web_flask1 --mount type=bind,source=/app/,target=/app/ app:0.0.3,命令行提示-p 参数就无效了,那么我怎么实现指定端口去访问容器中服务?
        5
    julyclyde   229 天前
    @autotesting 容器技术解决了其他社会制度不存在的问题
        6
    autotesting   229 天前
    @julyclyde 那我遇到的问题有解决思路吗?😆
        7
    julyclyde   229 天前
    你这个看着像网络问题。不确定
        8
    fohnwind   227 天前
    @autotesting 已经指定了网络是 host 模式,-p 参数就无效了。-p 的意思是 bridge 方式启动
        9
    autotesting   227 天前
    @fohnwind 恩我了解,那这个时候该怎么用呢,比如我在 docker 中启动服务的时候暴露了 nginx 的 80 端口,那么我在宿主机该访问什么 ip:port 去访问 docker 中的服务呢?
        10
    learningman   226 天前
    @autotesting host 模式下内部端口就是外部端口,你在外部访问的就是你 nginx listen 的端口
        11
    fire9   226 天前
    容器之间可以用 link 啊. 感觉开发环境用 docker-compose 挺方便的.
        12
    autotesting   217 天前
    @learningman 我是在 mac 下启动的 docker 命令,然后比如 docker run --network host -d 4c81e42e4e0d,我想开启 80 端口,就是无效的
        13
    petercui   216 天前
    @autotesting macOS 不支持 host 模式,不用试了。
        14
    autotesting   216 天前
    @petercui 悲剧了,我现在想在 macOS 上启动的 nginx 服务内限制 ip 访问,发现 nginx 内无法获取真实 ip,所以无法配置限制。都蛋疼了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1263 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 23:35 · PVG 07:35 · LAX 15:35 · JFK 18:35
    ♥ Do have faith in what you're doing.