使用dockerfile

时间:2018-10-11 07:02:29

标签: 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-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的目录。

我想知道我在哪里做错了。 你能帮我吗?

1 个答案:

答案 0 :(得分:1)

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

  1. RUN mkdir -p /var/www/html/foo在容器的文件系统内创建foo目录。
  2. docker-compose.yml ./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参数。创建或运行容器时,必须指定安装点。