Docker build 说目录已经存在但它不存在

Posted

技术标签:

【中文标题】Docker build 说目录已经存在但它不存在【英文标题】:Docker build says directory already exists but it is not 【发布时间】:2020-10-31 02:37:31 【问题描述】:

在 dockerfile 中,我正在创建目录 /var/log/nginx,因为即使将 nginx.conf 设置为将日志保存在 /var/log/nginx 中,它也不存在于容器中

但是,docker build 失败,说目录 /var/log/nginx 已经存在。但事实并非如此。

Docker 构建错误:

root@jsd-user-management:~/flask# docker build -t flask_app .
Sending build context to Docker daemon  716.8kB
Step 1/6 : FROM tiangolo/uwsgi-nginx-flask:python3.5
 ---> dea8fea96656
Step 2/6 : RUN mkdir  /var/log/nginx
 ---> Running in 9e9ff86747a7
mkdir: cannot create directory ‘/var/log/nginx’: File exists
The command '/bin/sh -c mkdir  /var/log/nginx' returned a non-zero code: 1

Docker 容器内部:

root@jsd-user-management:~/flask# docker exec -it flask_jsd-user-management_1 bash
root@c6d43f610a51:/app/app# ls /var/log
root@c6d43f610a51:/app/app#

令人惊讶的是,当我尝试从容器内部创建目录时,它可以工作。但是,其中没有填充任何日志。

【问题讨论】:

【参考方案1】:

您可以使用-p 标志。

-p, --parents 如果存在则没有错误,根据需要创建父目录

RUN mkdir -p /var/log/nginx
RUN ls /var/log/

可能是缺少父导演。

【讨论】:

否,因为 /var/log 已经存在于容器中。 nginx 也已安装并正常工作,因此 /var/log/nginx 应该已经存在,而无需我创建它。 你是如何运行容器的?你能显示命令吗? 我使用 docker-compose up 并且网络服务器正在运行 我的问题是,为什么 nginx 即使在创建后也不填充 /var/log/nginx 中的日志。 这个依赖于进程的东西,如果 Nginx 还没有启动它不会填充文件,显示 dockerfile 的CMD

以上是关于Docker build 说目录已经存在但它不存在的主要内容,如果未能解决你的问题,请参考以下文章

PHP 不能归档contact.html,但它不应该存在? (智能引擎)

重命名一个目录,确保它不存在

即使存在 .cpanel.yml 文件,cPanel 也不会部署

Shell 脚本 - 如果目录不存在则创建目录

如果该记录尚不存在但它不起作用,我试图仅将新记录插入数据库

与 PhoneGap Build 一起使用的响应式滑动轮播 - 是不是存在?