Docker Apache容器立即存在于Ubuntu 18.04上(从Docker文件构建)

Docker Apache容器立即存在于Ubuntu 18.04上(从Docker文件构建),ubuntu,dockerfile,containers,Ubuntu,Dockerfile,Containers,我已经创建了一个docker文件,当我构建和运行容器时,容器立即退出 我使用Ubuntu18.04作为安装docker的基本操作系统 我的docker文件包含以下内容 FROM ubuntu <br> RUN apt-get update <br> RUN apt-get install apache2 -y <br> RUN apt-get install apache2-utils -y <br> RUN apt-get clean <b

我已经创建了一个docker文件,当我构建和运行容器时,容器立即退出

我使用Ubuntu18.04作为安装docker的基本操作系统

我的docker文件包含以下内容

FROM ubuntu <br>
RUN apt-get update <br>
RUN apt-get install apache2 -y <br>
RUN apt-get install apache2-utils -y <br>
RUN apt-get clean <br>
RUN rm -rf /var/lib/apt/lists/* <br>
EXPOSE 80 <br>
ENTRYPOINT ["apache2ctl"] <br>
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"] <br>
跟踪输出

sudo docker ps -a <br>
sudo docker ps-a
容器ID图像命令
已创建状态端口
名称6b1891ac8195 myimage“apache2ctl/usr/sbi…”
15分钟前退出(1)15分钟前退出
绝对正确的威廉森dc3cc1328508 5b5570dec3a9
“tail-f/dev/null/…”17分钟前退出(1)17分钟前退出 斯多葛·甘古利
a67f5cb9f080 53a1c1ddc4fc“尾巴-f /dev/null/…“18分钟前退出(1)18分钟前退出
充满活力的grothendieck
07fa216c6c00 b5d19c3240f7
“apache2ctl/usr/sbi…”31分钟前退出(1)31分钟前退出 keen_blackburn
71d686cb0b8e 568c96482f1c
“apache2ctl/bin/sh…”39分钟前退出(1)38分钟前退出 happy_saha
11e0abe7c2ec d056b6f1d824“apache2ctl /bin/sh…“40分钟前退出(1)40分钟前退出
充满活力的\u kare
17ed24e8eef4 d056b6f1d824英寸公寓 /bin/sh…“3小时前退出(1)3小时前退出
勇敢的迪杰斯特拉
b1c6d9bf2765 d056b6f1d824
“apache2ctl/bin/sh…”3小时前退出(1)3小时前退出
兴高采烈


请帮助。

在您的Dockerfile中有一些需要更正的内容

对基础图像使用特定版本

从ubuntu:18.04
从图像向您的
添加特定版本,这有助于理解此Docker图像构建的基本图像(
ubuntu:18.04
)的版本

组合多个
运行
命令

如果可能,将多个
运行
命令组合为单个
运行
命令
,有助于减少docker层的数量,从而减小图像的大小

检查Dockerfile最佳实践-

把这个从

RUN apt-get update 
RUN apt-get install apache2 -y 
RUN apt-get install apache2-utils -y 

指令修正

正如您在
入口点中已经提到的
apache2ctl
无需在
CMD
中再次提及。您的命令被解释为
apache2ctl/usr/sbin/apache2ctl-DFOREGROUND
。因此docker
run
命令失败

下面是您的
Dockerfile
是如何修改的:

$ cat Dockerfile 
FROM ubuntu:18.04
RUN apt-get update && \
    apt-get install -y apache2 apache2-utils && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
EXPOSE 80
ENTRYPOINT ["apache2ctl"]
CMD ["-DFOREGROUND"]

现在像您所做的那样构建Docker映像

$ docker build -t myimage:1.0 .
Sending build context to Docker daemon   38.3MB
Step 1/5 : FROM ubuntu:18.04
 ---> cf0f3ca922e0
Step 2/5 : RUN apt-get update &&     apt-get install -y apache2 apache2-utils &&     apt-get clean &&     rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 2f47b3a5e735
Step 3/5 : EXPOSE 80
 ---> Using cache
 ---> 5b395b19a0dc
Step 4/5 : ENTRYPOINT ["apache2ctl"]
 ---> Using cache
 ---> be1afc8d76c3
Step 5/5 : CMD ["-DFOREGROUND"]
 ---> Running in 3d0d78c566e2
Removing intermediate container 3d0d78c566e2
 ---> 00167996f7f3
Successfully built 00167996f7f3
Successfully tagged myimage:1.0
以分离模式运行容器
-d
,以便在后台运行进程

$ docker run -d -p 80:80 myimage:1.0
eccb77059f9ce8628e7a47d64adb9d20a3ca6cb3cecce06935b46eb13652b992


$ docker ps | grep eccb77
eccb77059f9c        myimage:1.0       "apache2ctl -DFOREGR…"   14 seconds ago      Up 12 seconds       0.0.0.0:80->80/tcp                     charming_payne

$ docker ps | grep eccb77
eccb77059f9c        myimage:1.0       "apache2ctl -DFOREGR…"   27 seconds ago      Up 25 seconds       0.0.0.0:80->80/tcp                     charming_payne

$ docker ps | grep eccb77
eccb77059f9c        myimage:1.0        "apache2ctl -DFOREGR…"   4 minutes ago       Up 4 minutes        0.0.0.0:80->80/tcp                     charming_payne
点击带有本地主机和端口80的URL

$ curl http://localhost:80

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!--
    Modified from the Debian original for Ubuntu
    Last updated: 2016-11-16
    See: https://launchpad.net/bugs/1288690
  -->
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache2 Ubuntu Default Page: It works</title>
    <style type="text/css" media="screen">
  * {
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 0px;
$curlhttp://localhost:80
Apache2 Ubuntu默认页面:正常工作
* {
保证金:0px 0px 0px 0px;
填充:0px 0px 0px 0px;
也可从浏览器中下载

$ docker run -d -p 80:80 myimage:1.0
eccb77059f9ce8628e7a47d64adb9d20a3ca6cb3cecce06935b46eb13652b992


$ docker ps | grep eccb77
eccb77059f9c        myimage:1.0       "apache2ctl -DFOREGR…"   14 seconds ago      Up 12 seconds       0.0.0.0:80->80/tcp                     charming_payne

$ docker ps | grep eccb77
eccb77059f9c        myimage:1.0       "apache2ctl -DFOREGR…"   27 seconds ago      Up 25 seconds       0.0.0.0:80->80/tcp                     charming_payne

$ docker ps | grep eccb77
eccb77059f9c        myimage:1.0        "apache2ctl -DFOREGR…"   4 minutes ago       Up 4 minutes        0.0.0.0:80->80/tcp                     charming_payne
$ curl http://localhost:80

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!--
    Modified from the Debian original for Ubuntu
    Last updated: 2016-11-16
    See: https://launchpad.net/bugs/1288690
  -->
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache2 Ubuntu Default Page: It works</title>
    <style type="text/css" media="screen">
  * {
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 0px;