我正在安装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上回复。
所以这不是关于启动服务而是关于分离
我尝试过(在一个正在运行的容器中):
结果如果总是相同的:进程不会分离,保持点不变,服务在中断过程后运行正常。
一些系统信息(来自容器,从默认的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
答案 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
虽然这确实解决了这个问题,但我欢迎就这可能带来的安全性或其他影响提出意见。