Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu Dockerfile中的neo4j-“维修neo4j维修启动”未分离_Ubuntu_Neo4j_Docker_Digital Ocean - Fatal编程技术网

Ubuntu Dockerfile中的neo4j-“维修neo4j维修启动”未分离

Ubuntu Dockerfile中的neo4j-“维修neo4j维修启动”未分离,ubuntu,neo4j,docker,digital-ocean,Ubuntu,Neo4j,Docker,Digital Ocean,我安装neo4j是作为docker容器中更大设置的一部分,而不是独立的neo4j映像。 首先,我在windows上的docker机器虚拟机上测试它,它的构建和运行就像charm一样。 然后我把它带到Digital Ocean,它也会构建,但当到达Dockerfile中的服务neo4j服务启动时,它显示了这一点 Starting Neo4j Server...WARNING: not changing user process [138]... waiting for server to be r

我安装neo4j是作为docker容器中更大设置的一部分,而不是独立的neo4j映像。 首先,我在windows上的docker机器虚拟机上测试它,它的构建和运行就像charm一样。 然后我把它带到Digital Ocean,它也会构建,但当到达Dockerfile中的服务neo4j服务启动时,它显示了这一点

Starting Neo4j Server...WARNING: not changing user
process [138]... waiting for server to be ready............................
这些点不断增加——没有失败,没有分离。 如果我登录到容器并运行服务neo4j service start,同样的事情也会发生。然而,在这种情况下,如果我控制进程并检查状态,neo4j正在运行并在7474上应答

因此,这实际上不是关于启动服务,而是关于分离

我在一个运行的容器中尝试:

将java更新为oracle 8 sudo apt get install oracle-java8-installer 直接运行neo4j/var/lib/neo4j/bin/neo4j start 如果结果总是一样的话:进程不会分离,保持点继续,服务在中断进程后运行良好

容器中的一些系统信息,由默认的ubuntu映像生成:

root@04b1ec55572e:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Reelease:        14.04
Cdename:       trusty

root@04b1ec55572e:/# ulimit  -n
524288
主机系统:

/# lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty
我现在看到的唯一选项是在后台服务neo4j service start&,sleep中运行命令2-3秒,然后用ps检查服务是否正在运行,但为什么首先需要这个可怕的措施呢

感谢您的帮助

日志:

Dockerfile:

# Get neo4j
RUN wget -O - http://debian.neo4j.org/neotechnology.gpg.key| apt-key add - # Import our signing key
RUN echo 'deb http://debian.neo4j.org/repo stable/' > /etc/apt/sources.list.d/neo4j.list # Create an Apt sources.list file
RUN apt-get update -y # Find out about the files in our repository
RUN apt-get install neo4j -y # Install Neo4j, community edition

# update neo4j listen ip to current ip
RUN sed "s/#org.neo4j.server.webserver.address=0.0.0.0/org.neo4j.server.webserver.address=0.0.0.0/" -i /etc/neo4j/neo4j-server.properties

# ... a bit later ...

RUN service neo4j-service start

以下是调查总结:

neo4j日志没有显示任何有趣的内容,但是查看/var/lib/neo4j/bin/neo4j启动服务的neo4j可执行文件,我意识到它使用lsof检查进程是否已准备好侦听7474或neo4j配置使用的任何端口

neo4j启动脚本中的lsof调用没有返回任何内容,即使我可以确认neo4j已经在使用netstat和对neo4j REST端点的直接请求运行

检查lsof发现了一些与neo4j相关的被拒绝许可的消息

通过谷歌搜索docker lsof权限被拒绝之类的内容,我发现了这篇有用的小文章:。作者对LinuxMint17也有类似的问题,但显然它也适用于Ubuntu

修复程序归结为在主机上运行此功能:

如果您碰巧没有aa投诉,请使用以下设备安装:

sudo apt-get install apparmor-utils

现在,虽然这确实解决了问题,我欢迎您就这可能带来的安全性或其他影响发表意见。

您使用了哪个docker文件?使用docker exec/bin/bash进入正在运行的映像,检查data/log/neo4j.log和data/graph.db/messages.log以查找错误并报告。感谢Michael对这些问题的快速回答,很抱歉我找不到在您以前的回答中有任何帮助。我已经用日志更新了这个问题。当我做其他事情时,比如访问权限出错,我也设法得到了120秒后的所有错误,但现在的方式是日志没有问题。我正在使用自己的docker文件,并将其添加到问题中。将日志移至要点:我终于意识到/bin/neo4j只是一个shell脚本,它正是这样做的——睡眠和检查。因此,从脚本内部看,lsof显然没有返回脚本所期望的结果。如果我在服务器运行时也尝试手动运行lsof,并且使用wget检查,则这是正确的。但是netstat-a的节目7474和7473被收听。我会继续寻找,但会很感激你的想法。
sudo apt-get install apparmor-utils