gpt4 book ai didi

安装在 Windows 8 上的 Docker 卷不起作用

转载 作者:行者123 更新时间:2023-12-01 07:24:17 25 4
gpt4 key购买 nike

语境

我想在 Windows 8 上运行 Docker Compose 应用程序。我在 Ubuntu 16.04 下制作它并且它完美地工作。

这个 Docker Compose 运行:

  • nginx
  • php-fpm

  • 这两个容器使用卷。

    文件

    我的 .env文件:
    COMPOSE_CONVERT_WINDOWS_PATHS=1
    APPLICATION_PATH=//C/Users/my_user/Documents/Development/my_application

    我的 docker-compose.yml文件:
    version: '2'

    services:
    web:
    build: ../application-web/
    ports:
    - "80:80"
    tty: true
    # Add a volume to link php code on the host and inside the container
    volumes:
    - ${APPLICATION_PATH}:/usr/share/nginx/html/application
    - ${APPLICATION_PATH}/docker_files/docker-assistant:/usr/share/nginx/html/assistant
    # Add hostnames to allow devs to call special url to open sites
    extra_hosts:
    - "localhost:127.0.0.1"
    - "assistant.docker:127.0.0.1"
    - "application.dev:127.0.0.1"
    depends_on:
    - custom-php
    links:
    - custom-php:custom-php

    custom-php:
    build: ../application-php/
    ports:
    - "50:50"
    volumes:
    - ${APPLICATION_PATH}:/usr/share/nginx/html/application
    - ${APPLICATION_PATH}/docker_files/docker-assistant:/usr/share/nginx/html/assistant

    问题

    当我跑 docker-compose up , 一切顺利。容器启动。
    但是当我尝试联系 http://192.168.99.100 时在我的网络浏览器中,我收到了 403 错误。

    我的调查显示在 nginx 和 php 容器中没有挂载的卷:
    docker exec -it compose_web_1 bash
    ls -la /usr/share/nginx/html/assistant/

    显示
    drwxr.xr.x 2 root root   80 May 18 15:30 .
    drwxr.xr.x 2 root root 4096 May 18 16:10 ..

    Docker 似乎无法挂载卷。为什么?

    其他信息
  • 我正在使用 Docker 工具箱:https://www.docker.com/products/docker-toolbox
  • 我知道这是一个很好的 IP 地址,因为当我尝试在我的 Web 浏览器中访问它时,我看到我的 nginx 容器显示日志。
  • 环境变量 APPLICATION_PATH设为 //C:/Users/my_user/Documents/Development/my_application无法工作,因为 Docker 使用“:”字符作为卷声明的分隔符:

    ERROR: Volume //C:/Users/my_user/Documents/Development/my_application://C:/Users/my_user/Documents/Development/my_application has incorrect format, should be external:internal[:mode]

  • 这不是 nginx 问题,因为当我创建 index.phtml 时文件夹中的文件,我可以运行它:
    <?php
    echo 'Hello world!';
  • 最佳答案

    好吧,我终于做到了!

    TL; 博士

    按照这些说明访问容器内的 C:\。

    1.安装Docker工具箱

    去这里拿:https://www.docker.com/products/docker-toolbox

    安装它。

    2. 运行一个 Hello world

    打开 Docker 快速入门终端。

    Docker Quickstart Terminal opened

    在里面运行:

    docker run hello-world

    3. 与 Docker 共享 C:\

    打开虚拟机

    Virtualbox opened
    default的开启配置虚拟机并转至 shared folders
    Configuration of the default virtual machine

    通过单击右侧的按钮修改或创建新的共享文件夹。将选项设置为:
  • C:\
  • C
  • 自动安装
  • 永久配置

  • 然后验证。

    enter image description here

    4.激活分享

    关闭 default虚拟机然后重新启动它。

    5. 设置你的路径

    例如。如果您有 .env文件:
    COMPOSE_CONVERT_WINDOWS_PATHS=1
    APPLICATION_PATH=//C/path_from_C_to_the_folder_you_want_to_share_on_the_volume

    /!\需要设置 COMPOSE_CONVERT_WINDOWS_PATHS到 1!

    6. 开始你的 Compose

    在 Docker 快速入门终端中:

    Docker Quickstart Terminal opened

    转到您的 Docker Compose 文件夹,然后启动它:
    cd /path_to_your_compose_folder
    docker-compose up

    我为什么要这样做?太复杂了!

    Docker 技术依赖于 Linux 命名空间。没有 Linux,它就无法工作。要允许在 Windows 上使用 Docker,Docker 需要安装 Linux 虚拟机。所有的容器都将在其中运行。

    Docker stack explained
    default虚拟机现在已在 Virtualbox 中创建并运行,这就是您必须使用 Virtualbox 共享文件夹的原因。

    分享后, default虚拟机将在其中安装一个带有自定义名称的文件夹(在上面的示例中,它是 C,但也可以是 elephant 或其他名称)。

    最后,Docker 将从 default 挂载卷。虚拟机到容器:你得用 default的名字卷声明中的机器共享文件夹(在上面的示例中,它是 C,但它可以是 elephant 或其他)。

    Docker folder share explained

    关于安装在 Windows 8 上的 Docker 卷不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44054058/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com