【发布时间】: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