簡體   English   中英

無法在 Dockerfile 中執行 RUN mkdir

[英]Cannot execute RUN mkdir in a Dockerfile

這是我在構建 Docker 圖像時收到的錯誤消息:

Step 18 : RUN mkdir /var/www/app && chown luqo33:www-data /var/www/app
---> Running in 7b5854406120 mkdir: cannot create directory '/var/www/app': No such file or directory

這是導致錯誤的 Dockerfile 的片段:

FROM ubuntu:14.04
RUN groupadd -r luqo33 && useradd -r -g luqo33 luqo33

<installing nginx, fpm, php and a couple of other things>

RUN mkdir /var/www/app && chown luqo33:www-data /var/www/app
VOLUME /var/www/app
WORKDIR /var/www/app

mkdir: cannot create directory '/var/www/app': No such file or directory聽起來很荒謬——當然沒有這樣的目錄。 我想創造它。 這里有什么問題?

問題是/var/www也不存在,並且默認情況下mkdir不是遞歸的——它期望直接父目錄存在。

用:

mkdir -p /var/www/app

...或在到達 Dockerfile 中的這一點之前安裝一個創建/var/www的包。

創建從不存在的父目錄掛起的子目錄時,您必須將-p標志傳遞給mkdir ...請更新您的 Dockerfile

RUN mkdir -p ... 

我測試了這個,它是正確的。

您也可以簡單地使用

WORKDIR /var/www/app

如果文件夾不存在,它將自動創建文件夾。

然后切換回您需要進入的目錄。

此外,如果您想使用多個目錄然后更改其所有者,您可以使用:

RUN set -ex && bash -c 'mkdir -p /var/www/{app1,app2}' && bash -c 'chown luqo33:www-data /var/www/{app1,app2}'                 

只是這個!

除了之前的用例,您還可以使用Docker Compose創建目錄,以防您想在docker-compose up上創建新的虛擬文件夾:

    volumes:
  - .:/ftp/
  - /ftp/node_modules
  - /ftp/files

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM