首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将一个码头容器目录映射到主机上?

如何将一个码头容器目录映射到主机上?
EN

Stack Overflow用户
提问于 2019-12-03 14:25:07
回答 3查看 14.9K关注 0票数 13

给定以下docker-compose.yml设置:

代码语言:javascript
复制
version: '3.7'

services:
  reverse:
    container_name: nginx-reverse-proxy
    hostname: nginx-reverse-proxy
    image: nginx:stable
    ports:
      - 80:80
      - 433:433
    volumes:
      - type: bind
        source: ./config
        target: /etc/nginx
        consistency: consistent

这将导致将./config文件夹映射到容器nginx-reverse-proxy,从而映射到容器内的空/etc/nginx目录。

目标

将文件夹容器映射到主机。在我的示例中,容器/etc/nginx 主机./config

我当前的搜索不断地将directoy 主机映射到容器(我不想这样做)。

如有任何提示或解决方案,将不胜感激。谢谢!

我目前的解决方案很难看:我用docker创建了容器,并将文件从/etc/nginx复制到./config。移除容器并使用docker-compose up工作并启动nginx,因为所需的文件已经在主机上。

编辑:该文件夹在创建时不存在。正在创建文档中所述的文件夹。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-17 07:53:16

阅读:码头工人卷页

与绑定挂载相比,卷有几个优点: 新卷可以由容器预先填充其内容。

因此,一个简单的docker-组合(在一个名为nginx的文件夹中):

代码语言:javascript
复制
version: "3.7"
volumes:
  xmpl:

services:
  testnginx:
    image: nginx:stable
    volumes:
      - xmpl:/etc/nginx

将通过以下方式生成主机系统上的所有文件:

代码语言:javascript
复制
$ docker-compose up
$ docker inspect nginx_xmpl
...
"Mountpoint": "/var/lib/docker/volumes/nginx_xmpl/_data"

然后可以查看主机上的文件。

代码语言:javascript
复制
# ls /var/lib/docker/volumes/nginx_xmpl/_data                               
  conf.d       fastcgi_params koi-utf    koi-win  
  mime.types   modules        nginx.conf scgi_params    
  uwsgi_params win-utf

最后,在./config中使用它

代码语言:javascript
复制
# ln -s /var/lib/docker/volumes/nginx_xmpl/_data ./config
# ls config
  conf.d       fastcgi_params koi-utf    koi-win  
  mime.types   modules        nginx.conf scgi_params    
  uwsgi_params win-utf
票数 8
EN

Stack Overflow用户

发布于 2019-12-10 12:09:37

一般来说,这是不可能的,因为容器只是“可运行的图像”,并且像一批zip文件一样存储在fs中。在run事件中,它们被平放到一个“文件夹”中,Linux在其中执行chroot并使用此根用户启动进程。

您可以选择在进程结束时将一些路径从主机操作系统映射到chrooted folder中的某些路径,但不能映射回来的方式。当Docker进行映射时,它将完全replaces路径,因此路径中的所有现有文件都将“隐藏”在图像fs中,并被映射的主机路径“替换”。

我认为您希望查看图像中的路径的“默认文件配置”。在我看来,有两种方法:

  • 启动具有映射路径的容器到另一个目录,当容器启动时,只需使用容器外壳将所需的文件夹内容复制到映射的文件夹。示例:让我们将/export映射到主机的./exported-configs,当容器启动时,使用docker exec {.... extra params and docker ps id} bash进入正在运行的容器,并运行类似于cp -R /etc/nginx /export/nginx-configs的内容。
  • 使用https://docs.docker.com/engine/reference/commandline/export/导出整个图像文件系统,并查看有趣的图像配置等等。

这两种方法都是有效的,通常,如果我需要从图像中找到任何文件夹,我就做第一个。

祝好运!

票数 0
EN

Stack Overflow用户

发布于 2019-12-11 09:58:28

好吧,你不应该像你那样做地图,因为你说它很难看。最方便、最轻松的方法是这样做:

代码语言:javascript
复制
version: '3.7'

    services:
      reverse:
        container_name: nginx-reverse-proxy
        hostname: nginx-reverse-proxy
        image: nginx:stable
        ports:
          - 80:80
          - 433:433
        volumes:
          - ./nginx-conf/myapp/nginx.conf:/etc/nginx/nginx.conf
          - ./nginx-conf/myapp/sites-enabled:/etc/nginx/sites-enabled


    volumes:
      nginx-conf:
    networks:
      myapp-net:
        driver: bridge

位置/etc/nginx还包含其他文件,例如,如果映射主机目录./config,这些文件(例如mime.types和fastcgi_params )将不存在,除非您将它们复制到主机,但这不是一个很好的解决方案。

上面,我刚刚将位于/nginx/myapp文件夹中的本地nginx.conf文件映射到/etx/nginx/nginx.conf,并将一个本地站点启用文件夹映射到容器中的/etc/nginx/site。

你会更好地保持事情尽可能简单,因为码头已经复杂的性质。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59159241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档