我的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 build-t myimage
。
运行容器的命令用户为:
sudo docker run -it -p 80:80 myimage
sudo docker ps -a <br>
请帮帮忙。
Dockerfile中需要纠正的几个问题
为基本图像使用特定版本
from Ubuntu:18.04
将特定版本添加到from
映像中,这有助于理解Docker映像是用什么版本的基本映像(Ubuntu:18.04
)构建的。
组合多个run
命令
如果可能的话,将多个run
命令组合到单个run
命令有助于减少docker层的数量,从而减少图像的大小。
检查Dockerfile最佳实践-https://docs.docker.com/develop/develop-images/dockerFile_best-practices/#run
将此更改自
RUN apt-get update
RUN apt-get install apache2 -y
RUN apt-get install apache2-utils -y
RUN apt-get update && \
apt-get install -y apache2 apache2-utils && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
因为您已经在EntryPoint
中提到了Apache2CTL
,所以不需要在cmd
中再次提到它。您的命令被解释为apache2ctl/usr/sbin/apache2ctl-dforeground
。因此,dockerrun
命令失败。
以下是您的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
点击带有localhost和端口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;
也是从浏览器
容器总是在创建和运行后立即退出。 我尝试使用命令运行mssql实例 当尝试类似的SO link link时 它显示 但在run命令中我已经设置了'accept_eula=y'。
我已经创建了两个docker容器,并尝试在ubuntu、debian和一些包上安装一些应用程序,如-mc、ping、traceroute。。但每当我从集装箱里出来,我就会把里面的东西都弄丢。。是否有docker命令保存我的配置?
我试图在docker容器上运行我的java应用程序。我在本地使用tomcat服务器,它工作正常。我是java/tomcat/docker的新手,所以我可能会错过一些非常简单的东西,但我认为只要将我的本地war文件指向就足够了。 这是我的docker-compose.yml 我可以看到文件,但我无法访问我的应用程序。我的本地主机仍然显示tomcat页面,而不是从本地安装的tomcat运行时看到的“H
问题内容: 我在后台运行一个容器 它迅速退出。但是,如果我在前台运行,则可以正常运行。我使用检查了日志 没有错误。有任何想法吗? DOCKERFILE start-all.sh 问题答案: 一个Docker容器的主要过程完成后退出。 在这种情况下,它将在脚本结束时退出。我对hadoop不太了解,无法在这种情况下告诉您如何做,但是您需要要么在前台运行某些东西,要么使用诸如runit或supervis
我有一个容器,我想停止,但当我做一个它挂起,永远不会停止它。 我试过正常的和