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

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

  •  
  •   autotesting · 2019-04-01 15:41:03 +08:00 · 5339 次点击
    这是一个创建于 2090 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务实现方式:

    服务使用 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
    fishcg
        1
    fishcg  
       2019-04-02 00:40:01 +08:00
    OperationalError 异常一般是数据库连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等,是不是连接池大小的问题
    autotesting
        2
    autotesting  
    OP
       2019-04-02 09:25:03 +08:00
    @fishcg 我没有单独指定连接池,我用的默认值,我看默认值 SQLALCHEMY_POOL_SIZE=5,按道理应该不是,我如果不用 docker 启动服务,直接命令行 gunicorn 启动服务,没有出现类似的数据库连接问题。
    learningman
        3
    learningman  
       2019-04-02 12:24:14 +08:00
    可以用 host 的网络模式试试
    autotesting
        4
    autotesting  
    OP
       2019-04-03 09:14:40 +08:00
    @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 参数就无效了,那么我怎么实现指定端口去访问容器中服务?
    julyclyde
        5
    julyclyde  
       2019-04-03 14:29:07 +08:00
    @autotesting 容器技术解决了其他社会制度不存在的问题
    autotesting
        6
    autotesting  
    OP
       2019-04-03 15:23:29 +08:00
    @julyclyde 那我遇到的问题有解决思路吗?😆
    julyclyde
        7
    julyclyde  
       2019-04-03 19:10:52 +08:00
    你这个看着像网络问题。不确定
    fohnwind
        8
    fohnwind  
       2019-04-05 18:05:43 +08:00
    @autotesting 已经指定了网络是 host 模式,-p 参数就无效了。-p 的意思是 bridge 方式启动
    autotesting
        9
    autotesting  
    OP
       2019-04-05 20:23:31 +08:00
    @fohnwind 恩我了解,那这个时候该怎么用呢,比如我在 docker 中启动服务的时候暴露了 nginx 的 80 端口,那么我在宿主机该访问什么 ip:port 去访问 docker 中的服务呢?
    learningman
        10
    learningman  
       2019-04-06 13:08:16 +08:00
    @autotesting host 模式下内部端口就是外部端口,你在外部访问的就是你 nginx listen 的端口
    fire9
        11
    fire9  
       2019-04-06 16:21:55 +08:00
    容器之间可以用 link 啊. 感觉开发环境用 docker-compose 挺方便的.
    autotesting
        12
    autotesting  
    OP
       2019-04-15 22:22:31 +08:00
    @learningman 我是在 mac 下启动的 docker 命令,然后比如 docker run --network host -d 4c81e42e4e0d,我想开启 80 端口,就是无效的
    petercui
        13
    petercui  
       2019-04-16 11:15:15 +08:00
    @autotesting macOS 不支持 host 模式,不用试了。
    autotesting
        14
    autotesting  
    OP
       2019-04-16 14:12:28 +08:00
    @petercui 悲剧了,我现在想在 macOS 上启动的 nginx 服务内限制 ip 访问,发现 nginx 内无法获取真实 ip,所以无法配置限制。都蛋疼了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   988 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:31 · PVG 06:31 · LAX 14:31 · JFK 17:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.