我有一个Docker容器,我只需要在Ubuntu上安装Docker,然后做:

sudo docker run -i -t ubuntu /bin/bash

我立即开始安装Java和其他一些工具,花了一些时间使用它,并停止了容器

exit

然后我想增加一个体积,并意识到这并不像我想象的那么简单。如果我使用sudo docker -v /somedir run…然后我就得到了一个新的容器,所以我必须安装Java,并做我之前已经做过的事情,只是为了得到一个带有挂载卷的容器。

所有关于从主机挂载文件夹的文档似乎都暗示,挂载卷可以在创建容器时完成。因此,避免从头重新配置新容器的唯一选择是将现有容器提交到存储库,并在挂载卷时将其用作新容器的基础。

这确实是向现有容器添加卷的唯一方法吗?


当前回答

我已经成功地将主机的/home/<user-name>文件夹挂载到现有(未运行)容器的/mnt文件夹。你可以用以下方法来做:

打开与停止容器对应的配置文件,该文件可以在/var/lib/docker/containers/99d……1fb/config.v2.目录下找到Json(可以是config. Json。Json为旧版本的docker)。 查找MountPoints部分,在我的例子中为空:"MountPoints":{}。接下来将内容替换为如下内容(你可以通过适当的设置从另一个容器复制适当的内容):

"MountPoints":{"/mnt":{"Source":"/home/<user-name>","Destination":"/mnt","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/home/<user-name>","Target":"/mnt"},"SkipMountpointCreation":false}}

或相同(格式化):

  "MountPoints": {
    "/mnt": {
      "Source": "/home/<user-name>",
      "Destination": "/mnt",
      "RW": true,
      "Name": "",
      "Driver": "",
      "Type": "bind",
      "Propagation": "rprivate",
      "Spec": {
        "Type": "bind",
        "Source": "/home/<user-name>",
        "Target": "/mnt"
      },
      "SkipMountpointCreation": false
    }
  }

重启docker服务:service docker Restart

这适用于我的Ubuntu 18.04.1和Docker 18.09.0

其他回答

在我不得不寻找这个问题很长一段时间后,使用Docker Windows容器的一个注意事项!

摘要:

Windows 10 Docker Desktop(最新版本) 使用Docker Windows容器镜像microsoft/mssql-server-windows-developer

问题:

我想挂载一个宿主字典到我的windows容器。

解决方案部分描述如下:

创建docker容器

docker run -d -p 1433:1433 -e sa_password=<STRONG_PASSWORD> -e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer . exe

进入容器中的shell命令

docker exec -it <CONTAINERID> cmd.exe

创建DIR

姆克迪尔·迪尔·芒特

停止容器

docker容器停止<CONTAINERID>

提交集装箱

码头工人提交<CONTAINERID> <NEWIMAGENAME>

删除旧容器

docker容器rm <CONTAINERID>

创建带有新映像和卷挂载的新容器

docker run -d -p 1433:1433 -e sa_password=<STRONG_PASSWORD> -e ACCEPT_EULA=Y -v C:\DirToMount:C:\DirForMount <NEWIMAGENAME> . C:\DirToMount

在这之后,我解决了这个问题在docker窗口容器。

最好的方法是通过docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH复制本地文件系统中一个目录中的所有文件和文件夹

SRC_PATH在容器上 DEST_PATH在本地主机上

然后使用Docker -compose up -d将一个卷附加到相同的DEST_PATH,并运行Docker容器

在docker-compose.yml中添加卷

volumes:
 - DEST_PATH:SRC_PATH

我已经成功地将主机的/home/<user-name>文件夹挂载到现有(未运行)容器的/mnt文件夹。你可以用以下方法来做:

打开与停止容器对应的配置文件,该文件可以在/var/lib/docker/containers/99d……1fb/config.v2.目录下找到Json(可以是config. Json。Json为旧版本的docker)。 查找MountPoints部分,在我的例子中为空:"MountPoints":{}。接下来将内容替换为如下内容(你可以通过适当的设置从另一个容器复制适当的内容):

"MountPoints":{"/mnt":{"Source":"/home/<user-name>","Destination":"/mnt","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/home/<user-name>","Target":"/mnt"},"SkipMountpointCreation":false}}

或相同(格式化):

  "MountPoints": {
    "/mnt": {
      "Source": "/home/<user-name>",
      "Destination": "/mnt",
      "RW": true,
      "Name": "",
      "Driver": "",
      "Type": "bind",
      "Propagation": "rprivate",
      "Spec": {
        "Type": "bind",
        "Source": "/home/<user-name>",
        "Target": "/mnt"
      },
      "SkipMountpointCreation": false
    }
  }

重启docker服务:service docker Restart

这适用于我的Ubuntu 18.04.1和Docker 18.09.0

使用符号链接到已经挂载的驱动器:

ln -s Source_path targer_path_where_is_already_mounted_on_the_running_docker

我们没有任何方法在运行的容器中添加容量,但为了达到这个目标,你可以使用下面的命令:

在容器和本地文件系统之间复制文件/文件夹:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

参考资料:

https://docs.docker.com/engine/reference/commandline/cp/