首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dockerfile中的neo4j -“服务新4j-服务启动”不分离

Dockerfile中的neo4j -“服务新4j-服务启动”不分离
EN

Stack Overflow用户
提问于 2015-09-07 08:35:38
回答 1查看 937关注 0票数 2

我正在安装neo4j作为一个更大的设置在一个码头容器(不是一个独立的neo4j映像)的一部分。首先,我在一个对接机器VM中的窗口上测试它,它构建并运行起来很有魅力。然后我把它带到数字海洋,它也构建了,但是当到达Dockerfile中的service neo4j-service start时,它显示

代码语言:javascript
运行
复制
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/ne4jstart)

如果结果总是一样的话:流程不会分离,保持点运行,服务在进程中断后运行良好。

一些系统信息(来自容器,由默认的ubuntu映像构建):

代码语言:javascript
运行
复制
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

东道系统:

代码语言:javascript
运行
复制
/# lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty

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

任何帮助都是非常感谢的。

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

Dockerfile:

代码语言:javascript
运行
复制
# 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
EN

回答 1

Stack Overflow用户

发布于 2015-09-07 12:37:38

以下是调查总结:

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

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

检查lsof发现了一些与neo4j相关的“拒绝权限”消息。

在谷歌上搜索类似于“码头管理员拒绝许可”的内容,我发现了一篇有用的文章:https://practiceml.wordpress.com/2014/12/26/permission-denied-for-lsof-in-docker/。作者与Linux 17有类似的问题,但显然它也适用于Ubuntu。

修复可以归结为在主机上运行这个

代码语言:javascript
运行
复制
sudo aa-complain /etc/apparmor.d/docker

如果您碰巧没有aa-抱怨,安装它时:

代码语言:javascript
运行
复制
sudo apt-get install apparmor-utils

现在,虽然这确实解决了这个问题,但我将欢迎关于这个问题可能带来的安全或其他影响的评论。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32434316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档