从Windows到Boot2docker VM共享文件的最佳方法是什么?

时间:2015-06-16 10:03:40

标签: docker boot2docker

我已在Windows上准备好我的代码,但我发现分享到boot2docker并不容易。

我还发现boot2docker无法持久化我的更改。例如,我在重新启动boot2docker后创建了一个文件夹/temp。这个文件夹消失了,非常不方便。

在Windows上使用某些代码时,您的方法是什么,但是需要对它们进行停靠?

--- ---更新

我尝试更新VirtualBox中的设置并重新启动boot2docker,但它无法在我的计算机上运行。

Enter image description here

docker@boot2docker:/$ ls -al /c
total 4
drwxr-xr-x    3 root     root            60 Jun 17 05:42 ./
drwxrwxr-x   17 root     root           400 Jun 17 05:42 ../
dr-xr-xr-x    1 docker   staff         4096 Jun 16 09:47 Users/

5 个答案:

答案 0 :(得分:63)

Boot2Docker是一个在VirtualBox上运行的小型Linux VM。因此,在您使用Docker(在此VM中运行)中的文件(来自Windows)之前,必须首先与Boot2Docker VM本身共享您的代码。

为此,您将Windows文件夹挂载到VM关闭时(此处假定VM名称为default):

C:/Program Files/Oracle/VirtualBox/VBoxManage sharedfolder \
add default -name win_share -hostpath c:/work

(或者您也可以打开VirtualBox UI并将文件夹安装到您的VM中,就像在屏幕截图中一样!)

现在ssh进入Docker Quickstart终端的Boot2Docker VM:

docker-machine ssh default

然后执行mount:

  1. 在VM中创建一个文件夹:sudo mkdir /VM_share
  2. 将Windows文件夹挂载到其中:sudo mount -t vboxsf win_share /VM_share
  3. 之后,您可以访问Boot2Docker VM中的C:/work

    cd /VM_share
    

    既然您的代码存在于VM中,您可以将它与Docker一起使用,方法是将其作为卷安装到容器中:

    docker-machine ssh default
    docker run --volume /VM_share:/folder/in/container some/image
    

    或者在构建Docker镜像时使用它:

    ...
    ADD /my_windows_folder /folder
    ...
    

答案 1 :(得分:7)

请参阅此answer

我使用Docker工具箱1.12.2和VirtualBox 5.1.6安装了Windows 10 Home Edition。

我能够在我的容器中成功安装C:\Users下的文件夹,而无需执行任何额外步骤,例如docker-machine ssh default

示例:

docker run -it --rm -v /c/Users/antonyj/Documents/code:/mnt ubuntu /bin/bash

因此,将文件放在C:\Users下可能是最简单的事情。

如果您不想将文件放在C:\Users下,则必须按照accepted answer中的步骤操作。

答案 2 :(得分:1)

使用Docker Toolbox,共享目录只能 <xsl:template match="pi.item"> <fo:table-row> <xsl:choose> <xsl:when test="common_part_ref"> <xsl:apply-templates select="//expdur-entry/itemno" mode="bulk"> <xsl:with-param name="id"> <xsl:value-of select="common_part_ref/@idref"/> </xsl:with-param> </xsl:apply-templates> </xsl:when> <xsl:otherwise /> </xsl:choose> </fo:table-row> </xsl:template> <xsl:template match="expdur-entry/itemno" mode="bulk"> <xsl:param name="id"/> <xsl:if test="@id = $id"> <fo:table-cell> <fo:block> <xsl:value-of disable-output-escaping="no" select="../nsn/fsc"/> <xsl:text disable-output-escaping="no">-</xsl:text> <xsl:value-of disable-output-escaping="no" select="normalize-space(../nsn/niin)"/> </fo:block> </fo:table-cell> </xsl:if> </xsl:template>

  

目录无效。卷目录必须位于Users目录下

Enter image description here

&#34; Docker Quickstart Terminal&#34;中的Step1&amp; Step2命令在Step1&amp;的实施中Step2可以是:

choices = ["Pizza", "Pasta", "Salad", "Nachos"]
choices_2 = ["Pizza", "pizza", "Pasta", "pasta", "Salad", "salad", "Nachos", "nachos"]
print ("Your choices are: ")
for index, item in enumerate(choices):
    print ((index+1), item)
choice = input("Which one would you like? (food item)")
for choice in choices_2:
    if choice!= choices_2: #trying to set parameters so people don't write troll answers
        input("That's not on the menu, try again: ")
    elif choice == "pizza" or "Pizza" or "pasta" or "Pasta": #trying to make Pizza and Pasta set at $4.99
        print ("That will be $4.99")
        break
    else:
        print ("That will be $1.99") #this part never comes up for some reason.

然后重启VM。试试这个:/c/User

参考文献:

答案 3 :(得分:1)

在系统托盘中,你应该让可爱的Docker鲸游泳。右键单击并选择“设置”。

Enter image description here

单击 Apply 。这将打开Credentials对话框,您需要提供当前的Windows凭据。确保您正确地给它。我还怀疑你可能需要成为管理员。

要在容器中安装我们的主机目录(C:\ data),我们将在运行容器时使用using System; namespace Convo- { class Program { static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Red; Console.BackgroundColor = ConsoleColor.DarkBlue; Console.WriteLine("Friend- How is your day going?"); Console.WriteLine(" "); Console.WriteLine("You- Good = 1" + " / Bad = 2"); ConsoleKeyInfo keyinfo = Console.ReadKey(); if (keyinfo.KeyChar == '1') { Console.WriteLine(" "); Console.WriteLine("Friend- That's very nice!"); } else { Console.WriteLine(" "); Console.WriteLine("Friend- Im sorry is there anything I can do?"); } Console.WriteLine(" "); Console.WriteLine("(Don't like your choice go back by clicking 3)"); bool running = true; if (keyinfo.KeyChar == '3') { //here is where i need the go back function } } } } (卷)标志。此处显示了一个示例运行:

Enter image description here

我在本地Docker容器中安装了CentOS。

-v

答案 4 :(得分:1)

使用Linux主机(虚拟机名称“默认”)安装共享文件夹Windows guest虚拟机:

关闭“默认” VM:

cd "C:\Program Files\Oracle\VirtualBox"
VBoxManage controlvm default poweroff

添加共享文件夹命令行:

./VBoxManage sharedfolder add default -name win_share -hostpath "C:\docker\volumes"

启动VM(无头命令行界面):

/VBoxManage startvm headless  default

连接到ssh:

docker-machine ssh default

创建VM sharedfolder目录:

sudo mkdir /sharedcontent

安装Windows文件夹以托管VM:

sudo mount -t vboxsf win_share /sharedcontent