Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
容器开始使用Dockerfile时如何触摸文件_Docker_Dockerfile - Fatal编程技术网

容器开始使用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

我的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 
它将直接退出我如何使这个容器持久化

请查看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