lstate错误:使用Docker构build命令从自定义图像构buildDocker时没有此类文件或目录
我已经创build了一个自定义图像的灯栈与以下文件
apps.conf Dockerfile entrypoint.sh start.sh supervisord.conf
Dockerfile
是使用ENV,RUN,ADD和CMD命令创build的。
每个应用程序安装成功,但坚持在ADD命令,并检查给定的path是正确的。
ADD /home/ktpl/nayan/MyLamp/supervisord.conf /etc/supervisor/supervisord.conf ADD /home/ktpl/nayan/MyLamp/apps.conf /etc/supervisor/conf.d/apps.conf ADD /home/ktpl/nayan/MyLamp/entrypoint.sh /entrypoint.sh ADD /home/ktpl/nayan/MyLamp/start.sh /start.sh
进程卡在添加命令:
lstat home/ktpl/nayan/lamp/supervisord.conf: no such file or directory
Docker的构build始终是相对于上下文而言的 – 也就是您在docker build
命令中传递的目录。 您不能在ADD中使用绝对path ,您应该指定相对于构build上下文的源文件。
对于本地文件,你应该使用COPY而不是ADD ,所以你的Dockerfile变成:
COPY ./supervisord.conf /etc/supervisor/supervisord.conf #etc.
然后你用docker docker build -t my-tag .
从你的MyLamp目录中构build它docker build -t my-tag .
ADD
可用于将本地文件复制到图像。
几件事:
- 您正在使用当前目录构build图像
- 在你的情况下,
/home/ktpl/nayan/lamp
是有效的目录 - 不知道如果你有一个目录
/home/ktpl/nayan/MyLamp
存在和文件存在那里。
根据docker的文件
path必须在构build的上下文中; 你不能添加../something /东西,因为docker build的第一步是将上下文目录(和子目录)发送到docker守护进程。
如果您的文件与构build映像的目录位于同一目录中,则可以在Dockerfile
使用以下语句
ADD ./supervisord.conf /etc/supervisor/supervisord.conf ADD ./apps.conf /etc/supervisor/conf.d/apps.conf ADD ./entrypoint.sh /entrypoint.sh ADD ./start.sh /start.sh
当然,就像在另一个答案中提到的那样,也可以使用COPY
。
示例Dockerfile
内容:
FROM busybox ADD ./test.txt /test.txt CMD ls /
您可以构build图像并运行它显示在下面的图像中添加的文件。
如果所有的文件和目录出现,仍然看到这个问题,然后检查.dockerignore
有相同的条目。