我无法在带有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-compose文件中,如下所示。
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的目录。
我想知道我在哪里做错了。 你能帮我吗?
答案 0 :(得分:1)
原因是您要将卷从主机装载到/var/www/html
。
逐步:
RUN mkdir -p /var/www/html/foo
在容器的文件系统内创建foo目录。./code:/var/www/html
“隐藏”容器文件系统中/var/www/html
的内容在主机文件系统上./code
的内容之后。实际上,当您执行到容器时,在查看./code
时会在主机上看到/var/www/html
目录的内容。
修复::要么从docker-compose.yml中删除卷,要么在启动容器之前在主机上创建foo
目录。
其他说明:在Dockerfile中,将卷声明为VOLUME ./code:/var/www/html
。这不起作用,您可能应该将其删除。在Dockerfile中,您无法在主机上指定路径。
引用docker:
主机目录在容器运行时声明:主机目录(挂载点)从本质上说是依赖于主机的。这是为了保留图像的可移植性。因为不能保证给定的主机目录在所有主机上都可用。因此,您无法从Dockerfile中挂载主机目录。 VOLUME指令不支持指定host-dir参数。创建或运行容器时,必须指定安装点。