当前位置: 首页 > 知识库问答 >
问题:

如何在docker机器中挂载本地卷

艾英范
2023-03-14

我正在尝试使用docker-machine和docker-compose。文件docker-compose.yml的定义如下:

web:
  build: .
  command: ./run_web.sh
  volumes:
    - .:/app
  ports:
    - "8000:8000"
  links:
    - db:db
    - rabbitmq:rabbit
    - redis:redis

运行docker-compose up-d时,一切正常,直到尝试执行该命令并产生错误:

无法启动容器B58E2DFA503B696417C1C3F49E2714086D4E9999BD71915A53502CB6EF43936D:[8]系统错误:exec:“./run_web.sh”:stat./run_web.sh:没有这样的文件或目录

本地卷未装入远程计算机。用webapps的代码挂载本地卷的推荐策略是什么?

共有1个答案

岳昊空
2023-03-14

Docker-machine自动定位用户目录...但有时这还不够。

我不知道Docker1.6的情况,但在1.8中,您可以为docker-machine添加一个附加挂载

CLI:(仅在计算机停止时有效)

因此windows中的一个示例是

/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default --name e --hostpath 'e:\' --automount

GUI:(不要求机器停止)

  1. 启动“Oracle VM VirtualBox管理器”
  2. 右键单击 (默认)
  3. 设置...
  4. 共享文件夹
  5. 右侧的文件夹+图标(添加共享)
  6. 文件夹路径: (E:)
  7. 文件夹名称: (e)
  8. 选中“自动挂载”和“使永久”(如果需要,只读...)(当前自动挂载有点没有意义……)
    null

但这只有在你重启机器,然后坐骑丢失之前才是好的...

向Boot2Docker添加自动挂起:

在登录到计算机时

mkdir -p <local_dir>
mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>

旧方法:不太推荐,但作为替代方法

>

  • 编辑(作为根用户)/mnt/sda1/var/lib/boot2docker/profile,sda1可能对您不同...
  • 添加

    add_mount() {
      if ! grep -q "try_mount_share $1 $2" /etc/rc.d/automount-shares ; then
        echo "try_mount_share $1 $2" >> /etc/rc.d/automount-shares
      fi
    }
    
    add_mount <local dir> <mount name>
    

    作为最后的手段,您可以采用稍微繁琐一些的替代方法,您可以只修改引导映像。

    >

  • Git-C core.autocrlf=false克隆https://github.com/boot2docker/boot2docker.git
  • CD Boot2Docker
  • Git-C Core.autocrlf=false checkout v1.8.1#或您的适当版本
  • 编辑rootfs/etc/rc.d/automount-shares
  • 在末尾的fi之前添加try_mount_share 行。例如:

    try_mount_share /e e
    

    只需确保不要将设置为操作系统需要的任何内容,如/bin等。

    这确实有用,只是又长又复杂

    docker版本1.8.1,docker-machine版本0.4.0

  •  类似资料:
    • 问题内容: 我对Docker中的整个数据量过程有疑问。基本上,这里有两个Dockerfile及其各自的运行命令: Dockerfile 1- 命令1- Dockerfile 2- 命令2- 因此,奇怪的是第一个dockerfile和命令按预期工作。docker守护程序将目录从容器装载到主机的位置。因此,我可以根据需要编辑配置文件,它们将在重新启动后保留在容器中。 但是,对于第二个dockerfil

    • 问题内容: 我有一个正在进行dockerizing的开发环境,并且我希望能够实时重新加载所做的更改而不必重建docker映像。我使用docker compose是因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器 我在我的中定义了两个容器: 我已经到了我应用程序的dockerfile中添加卷的地步,但是如何将主机的目录挂载到卷中,以便对代码的所有实时编辑都可以反映在容器中? 这是

    • 问题内容: 在Docker容器中挂载主机目录非常容易。 但是我需要另一种方式。 我使用Docker容器作为开发环境来开发WordPress插件。该Docker容器包含运行WordPress所需的一切(MySQL,Apache,PHP和WordPress)。我从Docker容器中的主机挂载了我的插件src文件夹,以便可以在开发期间测试我的插件。 对于调试,如果我在主机上运行的IDE具有对Docker

    • 假设我有一个应用程序具有这个简单的DockerFile: 然后我运行了一个容器: 所以它工作正常,并将一些日志存储在docker容器的中。 我也看到docker-mount目录从容器到主机,但它并没有解决我的问题我需要一种方法备份我的文件从Docker到主机。

    • 我试图在我本地的电脑上使用kafka(Windows10)作为生产者,在docker容器(ubuntu)上使用spark流作为消费者。我的示例在容器中一起工作,但我需要在本地计算机上创建流。 在容器的另一边,我正在监听端口2181来接收流。 我希望你能帮助我。谢了。

    • 问题内容: 我想将目录从docker容器挂载到本地文件系统。该目录是网站根目录,我需要能够使用任何编辑器在本地计算机上对其进行编辑。 我知道我可以运行,但是这样做只能在容器内创建一个空目录。 如何在Linux主机上的Docker容器内挂载目录? 问题答案: 如果您的目标是提供现成的LAMP,则应在Dockerfile中使用VOLUMES声明。 问题是docker不会挂载文件,因为它们已经在创建卷的