Dockerfile中的neo4j - "服务neo4j-service start"不分离

时间:2015-09-07 08:35:39

标签: ubuntu neo4j docker digital-ocean

我正在安装neo4j作为docker容器中更大的设置的一部分(不是独立的neo4j图像)。 首先,我在一个docker-machine VM的Windows上测试它,它的构建和运行就像魅力一样。 然后我把它带到Digital Ocean并且它也会构建,但是当它到达Dockerfile中的service neo4j-service start时,它会显示

Starting Neo4j Server...WARNING: not changing user
process [138]... waiting for server to be ready............................

并且点不断添加 - 没有失败,没有分离。 如果我登录容器并运行service neo4j-service start,就会发生同样的事情。但是在这种情况下,如果I ^ C进程并检查状态,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

我现在看到的唯一选项是在后台运行命令(service neo4j-service start &),睡眠2-3秒然后检查ps服务是否正在运行,但为什么这个可怕的措施首先需要。

感谢任何帮助。

日志:https://gist.github.com/koacms-deployment/dc5afb2a8a371237cfd8

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

1 个答案:

答案 0 :(得分:4)

所以这是调查的摘要:

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

在neo4j启动脚本中的lsof调用什么都没有返回,即使我确认neo4j已经使用netstat和直接请求到neo4j REST端点运行了。

检查lsof显示一些"许可被拒绝"与neo4j相关的消息。

谷歌搜索类似" docker lsof权限被拒绝"我找到了这篇有用的文章:https://practiceml.wordpress.com/2014/12/26/permission-denied-for-lsof-in-docker/。作者与Linux Mint 17有类似的问题,但显然它也适用于Ubuntu。

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

sudo aa-complain /etc/apparmor.d/docker

如果您碰巧没有抱怨,请安装:

sudo apt-get install apparmor-utils

虽然这确实解决了这个问题,但我欢迎就这可能带来的安全性或其他影响提出意见。