【问题标题】:docker segmentation fault (core dumped), what to do in this situation?docker 分段错误(核心转储),在这种情况下该怎么办?
【发布时间】:2017-01-29 18:44:06
【问题描述】:
root@ramcharran-VirtualBox:/home/ramcharran/src# docker run -it dll_img /bin/bash
bash-4.3# python3 app.py
connection to cursor
registering tokenizer
virtual table created
inserted data into virtual table
Segmentation fault (core dumped)
bash-4.3#

我尝试使用 ulimit -c unlimited 增加核心限制,但没有成功。

我已经在本地成功执行了代码,但是使用 docker 我似乎遇到了我不理解的分段错误。

我尝试增加无效的基本设备存储。 由于某种原因,我的 docker 机器没有基本设备存储。

root@ramcharran-VirtualBox:/home/ramcharran# docker info
Containers: 6
 Running: 0
 Paused: 0
 Stopped: 6
Images: 19
Server Version: 1.12.3
**Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 27**
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: apparmor seccomp
Kernel Version: 4.4.0-59-generic
Operating System: Ubuntu 16.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 8.046 GiB
Name: ramcharran-VirtualBox
ID: WRT4:KUPK:BFBA:EJ5G:XWT2:7FXX:UX42:NALM:FNNJ:Z4XV:X44U:NFOT
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Insecure Registries:
 127.0.0.0/8
root@ramcharran-VirtualBox:/home/ramcharran#

编辑

以下是我的源码:

import json

import apsw
import sqlitefts as fts

import search
from search import OUWordTokenizer

from flask import Flask
app = Flask(__name__)

#tracker = SummaryTracker()
def tokenize():
    connection = apsw.Connection('texts.db', flags=apsw.SQLITE_OPEN_READWRITE)
    c = connection.cursor()
    print("connection to cursor")
    fts.register_tokenizer(c, 'oulatin', fts.make_tokenizer_module(OUWordTokenizer('latin')))
    print("registering tokenizer")
    c.execute("begin;")
    c.execute("CREATE VIRTUAL TABLE IF NOT EXISTS text_idx  USING fts3 (id, title, book, author, date, chapter, verse, passage, link, documentType, tokenize={});".format("oulatin"))
    c.execute("commit;")
    print("virtual table created")
    c.execute("INSERT INTO text_idx (id, title, book, author, date, chapter, verse, passage, link, documentType) SELECT id, title, book, author, date, chapter, verse, passage, link, documentType FROM texts;")
    print ("inserted data into virtual table")

@app.route('/')
def hello_world():
    print ("Hello world")
    search.word_tokenizer
    print ("word_tokenizers")
    return json.dumps({"name": "test"})


if __name__ == '__main__':
    tokenize()
    app.run(debug=True, host='0.0.0.0')
 #tracker.print_diff()

OUTokenizer 没有问题,我已经使用 gdb、valgrind 进行了调试,并且还在每个语句之后使用了打印,并且所有这些都被执行且没有错误。一旦数据被插入到执行 OUTokenizer 之后的表中,就会发生分段错误。

请帮我解决这个问题。

【问题讨论】:

  • Docker 本身不会产生段错误,您的应用程序会。如果没有看到您的申请,我认为无法回答这个问题。
  • 我无法让整个代码成为此评论的一部分。 stackoverflow.com/questions/41861941/…你能得到链接吗?请。
  • 您正在运行的代码不应该是评论,它应该是对您的问题的编辑。上面有一个按钮。
  • 我已经在本地执行了上面的代码,去掉了 'app.run(debug=True, host='0.0.0.0')' 语句,代码执行正常,没有任何问题。为什么我在docker上运行会出现问题?

标签: python-3.x docker flask virtualbox


【解决方案1】:

问题在于烧瓶使用子进程重新启动代码。 在调用 tokenize() 函数之前检查 WERKZEUG_RUN_MAIN 环境变量解决了这个问题。

参考以下链接了解 WERKZEUG_RUN_MAIN 环境变量的用法 Why does running the Flask dev server run itself twice?

谢谢大家。

【讨论】:

    【解决方案2】:

    我尝试使用sudo pip install docker-compose 并修复。

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2015-06-25
      • 2021-06-03
      相关资源
      最近更新 更多