容器开始使用Dockerfile时如何触摸文件
我的Dockerfile容器开始使用Dockerfile时如何触摸文件,docker,dockerfile,Docker,Dockerfile,我的Dockerfile FROM ubuntu WORKDIR . RUN apt-get update RUN apt-get install apache2 -y COPY fffff.txt /var/www/html/ ENTRYPOINT ["sh", "-c", "touch /root/FILE1"] 我正在使用的构建 docker build -ti first:latest . 但是当我尝试使用 docker run -it -d first:latest bash
FROM ubuntu
WORKDIR .
RUN apt-get update
RUN apt-get install apache2 -y
COPY fffff.txt /var/www/html/
ENTRYPOINT ["sh", "-c", "touch /root/FILE1"]
我正在使用的构建
docker build -ti first:latest .
但是当我尝试使用
docker run -it -d first:latest bash
它将直接退出我如何使这个容器持久化 请查看Docker中的工作原理。如果您传递任何命令(如CMD
或与bash类似),它将运行它,因此在您的情况下,它将是:
"sh", "-c", "touch /root/FILE1" bash
这完全没有道理
如果要在容器中创建文件并将其作为守护进程运行,请执行以下操作:
docker run -it -d first:latest /bin/bash
Dockerfile:
FROM ubuntu
WORKDIR .
RUN apt-get update
RUN apt-get install apache2 -y
COPY fffff.txt /var/www/html/
RUN touch /root/myfile
按照与之前相同的方式构建,但按如下方式运行:
docker run -it -d first:latest /bin/bash
注意,它将作为守护进程运行容器(-d
标志),因此它不会进入容器的外壳
如果要附加到守护程序容器,请使用
docker attach
(或
)指令ENTRYPOINT
和CMD
指令告诉docker从映像启动容器时要做什么
您告诉Docker,当它从映像启动容器时,应该在容器的临时文件系统中创建一个空文件。一旦该过程完成,容器就完成了它的工作,应该退出
实际上,您通常希望实际设置此元数据,以告知Docker将已安装到映像中的服务器或应用程序作为前台进程运行。在Apache的情况下,这看起来更像
CMD ["apachectl", "start", "-DFOREGROUND"]
在容器中获取交互式shell对于调试来说很方便,但通常不是使用容器的方式
docker单独运行
应该可以理想地生成一个功能齐全的服务器。在阅读了这些文档两天后,我遇到了同样的问题:
构建并运行大约30个DockerFile:|,最后我找到了一种方法,可以触摸文件并使容器持久化而不退出
我像您一样使用ENTRYPOINT,但以这种方式添加了一个sh
作为最后一个命令:
执行官表格:
外壳形式:
这两种形式都是持久的,在执行以下命令后不会退出:
docker run -it --rm --name mycontainer -e "myvar=parsa" imagename
这两种形式的优点是它们支持变量替换,您可以运行多个由&&
分隔的命令
祝你好运
docker run -it --rm --name mycontainer -e "myvar=parsa" imagename