Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
docker在启动apache和neo4j后立即退出_Docker_Neo4j_Apache2 - Fatal编程技术网

docker在启动apache和neo4j后立即退出

docker在启动apache和neo4j后立即退出,docker,neo4j,apache2,Docker,Neo4j,Apache2,我有一个启动apache和neo4j的脚本/init。此脚本已在图像ubuntu:14中。以下是/init的内容: service apache2 start service neo4j start 从这个图像中,我创建了另一个具有以下dockerfile的图像 FROM ubuntu:v14 EXPOSE 80 80 ENTRYPOINT ["/init"] 当我运行命令dockerrun-dubuntu:v15时,容器启动然后退出。据我所知,-d选项在后台运行容器。另外,脚本\init启

我有一个启动apache和neo4j的脚本
/init
。此脚本已在图像
ubuntu:14
中。以下是
/init
的内容:

service apache2 start
service neo4j start
从这个图像中,我创建了另一个具有以下dockerfile的图像

FROM ubuntu:v14
EXPOSE 80 80
ENTRYPOINT ["/init"]

当我运行命令
dockerrun-dubuntu:v15
时,容器启动然后退出。据我所知,
-d
选项在后台运行容器。另外,脚本
\init
启动两个守护进程容器为什么退出?

当Dockerfile指定入口点时,容器的生存期正好是其进程的长度。通常,
服务的行为。。。启动
是将服务作为后台进程启动,然后立即返回;因此,您的
/init
脚本运行两个
服务
命令并完成,现在入口点过程完成,容器退出


通常公认的最佳实践是在一个容器中只运行一个进程。当其中一个进程是数据库时尤其如此。在您的例子中,有标准的Docker Hub和映像,因此我首先使用编排工具,比如并排运行这两个容器。

当Docker文件指定入口点时,容器的生命周期正好是其进程的长度。通常,
服务的行为。。。启动
是将服务作为后台进程启动,然后立即返回;因此,您的
/init
脚本运行两个
服务
命令并完成,现在入口点过程完成,容器退出


通常公认的最佳实践是在一个容器中只运行一个进程。当其中一个进程是数据库时尤其如此。在您的例子中,有标准的Docker Hub和图像,因此我首先使用编排工具,比如并排运行这两个容器。

事实上,我认为您的第一个问题是
##的内容,请在
init
文件中添加code>/bin/bash
在开始时,容器将如下所示:

shubuntu1@shubuntu1:~$ docker logs priceless_tu
standard_init_linux.go:207: exec user process caused "exec format error"
但即使解决了上述问题,您仍然无法启动您的容器,原因与其他人所说的相同:PID 1应始终存在,在您的情况下,在
service xxx start
finish之后,PID 1退出也将导致容器退出

因此,要解决此问题,您应该设置一个永不退出的命令,这是一个供您参考的最简单可行的示例:

Dockerfile:

FROM ubuntu:14.04
RUN apt-get update && \
    apt-get install -y apache2

COPY init /
RUN chmod +x /init

EXPOSE 80
ENTRYPOINT ["/init"]
#!/bin/bash

# you can add other service start here
# e.g. service neo4j start as you like if you have installed it already

# next will make apache run in foreground, so PID1 not exit.
/usr/sbin/apache2ctl -DFOREGROUND
init:

FROM ubuntu:14.04
RUN apt-get update && \
    apt-get install -y apache2

COPY init /
RUN chmod +x /init

EXPOSE 80
ENTRYPOINT ["/init"]
#!/bin/bash

# you can add other service start here
# e.g. service neo4j start as you like if you have installed it already

# next will make apache run in foreground, so PID1 not exit.
/usr/sbin/apache2ctl -DFOREGROUND

事实上,我认为您的第一个问题是
##的内容,请在
init
文件中添加code>/bin/bash
在开始时,容器将如下所示:

shubuntu1@shubuntu1:~$ docker logs priceless_tu
standard_init_linux.go:207: exec user process caused "exec format error"
但即使解决了上述问题,您仍然无法启动您的容器,原因与其他人所说的相同:PID 1应始终存在,在您的情况下,在
service xxx start
finish之后,PID 1退出也将导致容器退出

因此,要解决此问题,您应该设置一个永不退出的命令,这是一个供您参考的最简单可行的示例:

Dockerfile:

FROM ubuntu:14.04
RUN apt-get update && \
    apt-get install -y apache2

COPY init /
RUN chmod +x /init

EXPOSE 80
ENTRYPOINT ["/init"]
#!/bin/bash

# you can add other service start here
# e.g. service neo4j start as you like if you have installed it already

# next will make apache run in foreground, so PID1 not exit.
/usr/sbin/apache2ctl -DFOREGROUND
init:

FROM ubuntu:14.04
RUN apt-get update && \
    apt-get install -y apache2

COPY init /
RUN chmod +x /init

EXPOSE 80
ENTRYPOINT ["/init"]
#!/bin/bash

# you can add other service start here
# e.g. service neo4j start as you like if you have installed it already

# next will make apache run in foreground, so PID1 not exit.
/usr/sbin/apache2ctl -DFOREGROUND

您的脚本是pid 1,当pid 1退出时,容器死亡。尝试跟踪日志或其他引用:您的脚本是pid 1,当pid 1退出时,容器死亡。尝试跟踪日志或其他参考: