Node.js docker:mkDir命令未创建文件夹

Node.js docker:mkDir命令未创建文件夹,node.js,docker,dockerfile,Node.js,Docker,Dockerfile,我是docker新手,希望在应用程序目录中创建一个日志文件夹。它创建了应用程序目录,但ap目录中的创建日志文件夹不工作。我尝试构建映像并在本地运行,它在appdir中创建了logs文件夹,但在服务器中没有创建logs文件夹。请帮忙。。。。下面是我的docker文件 FROM node:14 # Create app directory WORKDIR /var/www/test-app-api/ # Install app dependencies # A wildcard is used

我是docker新手,希望在应用程序目录中创建一个日志文件夹。它创建了应用程序目录,但ap目录中的创建日志文件夹不工作。我尝试构建映像并在本地运行,它在appdir中创建了logs文件夹,但在服务器中没有创建logs文件夹。请帮忙。。。。下面是我的docker文件

FROM node:14

# Create app directory
WORKDIR /var/www/test-app-api/

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

#RUN npm install
# If you are building your code for production
RUN npm ci --only=production

RUN mkdir -p /var/www/test-app-api/logs

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

在第4行中,您正在创建一个工作目录并将自己定位在此文件夹中。然后,您将从此文件夹创建另一个文件夹,因此将在此路径上创建新文件夹:

/var/www/test-app-api/var/www/test-app-api/logs

您应该做的是替换命令步骤或将
RUN mkdir-p/var/www/test app api/logs
更改为
RUN mkdir-p/logs
WORKDIR不是正确的指令。 从官方网站:

WORKDIR指令为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使在任何后续Dockerfile指令中未使用,也会创建它

因此,在您的情况下,它会创建
/var/www/test-app-api/
文件夹,但也会将此目录设置为复制、运行和CMD指令的工作目录

由于指令
RUN mkdir-p/var/www/test-app-api/logs
将在
/var/www/test-app-api/logs
下创建一个文件夹
/var/www/test-app-api/
,因此您将得到以下文件夹:
/var/www/test-app-api/logs/var/www/test-app-api/
,这不是您想要的

要获取所需内容,请将
WORKDIR/var/www/test-app-api/
更改为
运行mkdir/var/www/test-app-api/


但是,如果您希望
复制
指令位于
/var/www/test-app-api/
中,请继续使用WORKDIR,但将
运行mkdir-p/var/www/test-app-api/logs
更改为
运行mkdir-p日志
mkdir-p/var/www/…
使用绝对路径,因此,它不会相对于当前的
WORKDIR
进行解释;它应该准确地创建名为的目录。我可能会使用较短的路径,但Dockerfile中的基本命令序列似乎没有问题。是什么原因导致您认为日志目录没有被创建?你是怎么启动集装箱的?(如果您正在通过
/var/www/test-app-api
目录挂载一些外部内容,那么将隐藏此Dockerfile所做的一切,我建议删除这些挂载。)