【问题标题】:Operation of the mkdir command with dockerfile使用 dockerfile 操作 mkdir 命令
【发布时间】:2018-10-11 07:02:28
【问题描述】:

我无法在带有 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的目录。

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

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案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 的内容后面。

    实际上,当您执行到容器中时,当您查看 /var/www/html 时,您会看到主机上 ./code 目录的内容。

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

    补充说明:在您的 Dockerfile 中,您将卷声明为 VOLUME ./code:/var/www/html。这不起作用,您可能应该将其删除。在 Dockerfile 中,您不能在主机上指定路径。

    引用docker:

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

    【讨论】:

    • 我该怎么做,然后我不想从 docker-compose 文件中删除 'volumes' 参数。
    【解决方案2】:

    我可以在 docker 的“workdir”中创建一个目录,如下所示:

    Dockerfile 内容

    COPY src/ /app
    COPY logging.conf /app
    COPY start.sh   /app/
    COPY Pipfile /app/
    COPY Pipfile.lock /app/
    COPY .env /app/
    RUN mkdir -p /app/logs
    COPY logs/some_log.log /app/logs/
    
    WORKDIR /app
    

    我没有在我的 'docker-compose.yaml' 文件中提到音量参数

    这就是我的建议:从 Fabian Braun 正确指出的“Dockerfile”中删除卷参数。

    FROM php:fpm
    RUN mkdir -p /var/www/html/foo
    WORKDIR /var/www/html
    

    并从 docker-compose 文件中删除卷参数。它会起作用的。另外,我想知道您如何测试有一个名为“foo”的目录。 Docker-compose 文件内容

    version: '3'
    services:
      web:
      build:
        context: .
        dockerfile: Dockerfile # The name of your docker file
      container_name: phpx
      ports:
        - "80:80"
    

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 2017-06-23
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      相关资源
      最近更新 更多