使用dockerfile操作mkdir命令

使用dockerfile操作mkdir命令,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我无法在具有dockerfile的容器中使用mkdir命令创建目录 我的Dockerfile文件很简单 FROM php:fpm WORKDIR /var/www/html VOLUME ./code:/var/www/html RUN mkdir -p /var/www/html/foo 通过这种方式,我创建了一个简单的php:fpm容器。 我写了一个名为foo的目录 docker build -t phpx . 我已经用上面的代码构建了 在我的docker中,按如下方式编写文件 v

我无法在具有dockerfile的容器中使用mkdir命令创建目录

我的Dockerfile文件很简单

FROM php:fpm

WORKDIR /var/www/html

VOLUME ./code:/var/www/html

RUN mkdir -p /var/www/html/foo
通过这种方式,我创建了一个简单的php:fpm容器。 我写了一个名为foo的目录

docker build -t phpx .
我已经用上面的代码构建了

在我的docker中,按如下方式编写文件

version: '3'

services:
web:
container_name: phpx
build : .
ports:
- "80:80"
volumes:
- ./code:/var/www/html
后来;运行下面的代码,我输入了容器内核

docker exec -it phpx /bin/bash
但是/var/www/html中没有名为foo的目录。

我不知道我哪里做错了。
您能帮助我吗?

原因是您正在将一个卷从主机装载到
/var/www/html
。 逐步:

  • runmkdir-p/var/www/html/foo
    在容器的文件系统中创建foo目录
  • docker-compose.yml
    /code:/var/www/html
    将容器文件系统中的
    /var/www/html
    内容“隐藏”在主机文件系统上的
    /code
    内容后面
  • 因此,实际上,当您执行到容器中时,当您查看
    /var/www/html
    时,您会看到主机上
    /code
    目录的内容

    修复:在启动容器之前,从docker-compose.yml中删除卷,或者在主机上创建
    foo
    -目录

    附加备注:在Docker文件中,您将一个卷声明为
    volume./code:/var/www/html
    。这不起作用,您可能应该删除它。在Dockerfile中,不能在主机上指定路径

    引述自:

    主机目录在容器运行时声明:主机目录(挂载点)本质上依赖于主机。这是为了保持图像的可移植性。因为不能保证给定的主机目录在所有主机上都可用。因此,无法从Dockerfile中装载主机目录卷指令不支持指定主机目录参数。创建或运行容器时必须指定装入点


    那么我该怎么做呢?我不想从docker compose文件中删除“volumes”参数。