【问题标题】:Host to mount container directory to the host?主机挂载容器目录到主机?
【发布时间】:2018-01-08 00:13:25
【问题描述】:

我在 /app 的图像中构建了我的 Web 项目的图像,其中包含我的所有依赖项。运行容器时,它开始快速启动,我可以立即访问应用程序。

但是我直接在 Dockerfile 中构建所有东西,所以主机除了 Dockerfile 什么都没有。

所以我尝试像docker run -v $(pwd):/app image_name 那样检索项目文件,但似乎该文件夹已被覆盖,因为在尝试提供公用文件夹时,它再也找不到了。只需排除音量选项,它就可以很好地启动。

当我认为它会覆盖我的容器文件夹时,我是对的吗?

为什么这对 GitLab 项目有效? (https://docs.gitlab.com/omnibus/docker/README.html#prerequisites)

他们将所有项目都放在容器中,并将其挂载到主机上。

sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

【问题讨论】:

    标签: docker containers docker-volume


    【解决方案1】:

    对于命名卷,映像内容会在创建卷时从映像复制到命名卷。此命名卷会将/bin 的内容复制到卷中:

    docker run -ti -v busyboxbin:/bin busybox sh
    

    绑定挂载目录被挂载并覆盖任何图像内容。所以这个例子会失败(除非你已经有了/tmp/empty中文件的副本)

    docker run -ti -v /tmp/empty:/bin busybox sh
    

    gitlab 容器将在镜像启动后填充绑定安装的卷内容。日志很容易添加那里的内容。数据目录可能需要由应用程序初始化。如果不存在文件,该图像可能带有预装配置以填充和运行。

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 1970-01-01
      • 2016-06-23
      • 2016-11-10
      • 2014-06-19
      • 1970-01-01
      • 2021-11-29
      • 2019-07-08
      • 1970-01-01
      相关资源
      最近更新 更多