相关疑难解决方法(0)

Docker Compose - 在多个容器之间共享命名卷

我正在使用docker-compose和v3.我正在尝试在docker中安装一个卷:

./appdata:/appdata

我希望将其作为卷,然后从多个容器引用该卷.的卷配置参考仅示出了data-volume:作为命名体积,用没有值,因此它不会像以上.

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume

volumes:
     app-volume: ./appdata:/appdata
Run Code Online (Sandbox Code Playgroud)

这给了我:

错误:在文件'./docker-compose.yml'中,卷'app-volume'必须是映射而不是字符串.

显然我知道我需要更改volumes键/值对,但我不知道如何更改它以便我可以在服务之间共享卷.

我也检查过,volumes_from但这实际上只允许从其他容器继承.我看到有人volumes_from在另一个包含他们想要的映射的容器上使用,但是command: true设置为容器从未实际运行,这对我来说就像是一个黑客.

我怎样才能做到这一点?


注意,我确实有以下工作:

nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata
Run Code Online (Sandbox Code Playgroud)

但这只是重复而且是我希望命名卷可以帮助我避免:-)

docker docker-compose

69
推荐指数
4
解决办法
5万
查看次数

Docker-组成命名的挂载卷

为了跟踪docker-compose使用的卷,我喜欢使用命名卷.这适用于"普通"卷

version: 2
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
volumes:
  named_vol:
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何在安装本地主机时使其工作.我正在寻找类似的东西:

version: 2
services: 
  example-app:
    volume:
      -named_homedir:/dir/in/container/volume
volumes:
  named_homedir: /c/Users/
Run Code Online (Sandbox Code Playgroud)

要么

version: 2
services: 
  example-app:
    volume:
      -/c/Users/:/home/dir/in/container/ --name named_homedir
Run Code Online (Sandbox Code Playgroud)

这是以任何可能的方式,还是我坚持使用已安装的匿名卷?

docker-compose docker-volume

49
推荐指数
5
解决办法
4万
查看次数

Docker在app文件夹中绑定elasticsearch卷

我有以下 docker-compose 文件:

version: "3.3"
services:    
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ports:
      - "9300:9300"
      - "9200:9200"

volumes:
  esdata:
Run Code Online (Sandbox Code Playgroud)

(为了清晰起见,我删除了其他服务)我可以在 /var/lib/ docker /volumes/ project_name _esdata 中看到卷,但我希望能够在 docker-compose.yml 所在的目录中创建卷,但我没有找不到办法这样做。

灵感来自How to set a path on host for a named volume in docker-compose.yml,我试过了

version: "3.3"
services:    
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ports:
      - "9300:9300"
      - "9200:9200"

volumes:
  esdata:
    driver: local
    driver_opts:
      type: 'none' …
Run Code Online (Sandbox Code Playgroud)

elasticsearch docker docker-compose

16
推荐指数
1
解决办法
2万
查看次数

更改卷的源路径

此dockerfile按预期工作.但问题是我无法改变音量来源.

version: "3.5"
services:
  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: india3391
    image: shantanuo/mysql:5.7
    ports:
    - mode: ingress
      target: 3306
      published: 3391
      protocol: tcp
    volumes:
    - type: volume
      source: dbvol
      target: /var/lib/mysql
volumes:
  dbvol: {}
Run Code Online (Sandbox Code Playgroud)

它似乎在默认的docker安装中创建一个如下所示的directory_name + volume_name文件夹...

"Source": "/var/lib/docker/volumes/hashi1_dbvol/_data",
Run Code Online (Sandbox Code Playgroud)

有没有办法改变这条道路?


更新:

# cat docker-compose.yml
version: "3.5"
services:
  mysql:
    environment:
      MYSQL_ROOT_PASSWORD: india3391
    image: shantanuo/mysql:5.7
    ports:
    - mode: ingress
      target: 3306
      published: 3391
      protocol: tcp
    volumes:
    - type: volume
      source: dbdata
      target: /var/lib/mysql

volumes:
  dbdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/srv4/db-data'
Run Code Online (Sandbox Code Playgroud)

只有在我第一次创建安装目录时,此撰写文件才有效 …

docker docker-compose docker-volume

7
推荐指数
0
解决办法
1667
查看次数

在docker-compose.yml上复制'docker volume create --name data'命令

我正在构建我的容器,docker-compose我想使用Docker的新卷API,但我不知道如何.

我想能够说docker-compose up -d:

  • 创建卷,或者如果已创建则使用它.
  • 使用先前卷容器中的数据创建服务容器.

docker docker-compose docker-volume

6
推荐指数
1
解决办法
3918
查看次数

在主机上chown docker卷(可能通过docker-compose)

我有以下示例

version: '2'

services:
  proxy:
    container_name: proxy
    hostname: proxy
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - proxy_conf:/etc/nginx
      - proxy_htdocs:/usr/share/nginx/html

volumes:
  proxy_conf: {}
  proxy_htdocs: {}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.当我运行docker-compose up它时,创建那些命名的卷/var/lib/docker/volumes,一切都很好.但是,从主机,我只能/var/lib/docker以root身份访问,因为它root:root(有意义).我想知道是否有一种方法可以chown将主机的目录更加明智/安全(比如,我用来在主机上做大部分工作的相对无特权的用户),或者我是否只需要chown手动操作它们.我已经开始有许多脚本可以解决其他问题了,所以有一个额外的几行不会有太大的问题,但我真的想保持自编自动化最小化,如果我可以 - 减少愚蠢错误的机会.

顺便说一句,没有:如果我挂载主机目录而不是创建卷,它们会被覆盖,这意味着如果它们开始为空,它们将保持为空,并且我没有从容器内部获得默认配置(或其他任何内容).

额外点:我可以将卷移到更方便的位置吗?说,/home/myuser/myserverstuff/volumes

chown docker docker-compose docker-volume

6
推荐指数
1
解决办法
1万
查看次数

“与命名卷不同,绑定安装不会自动将容器内容复制到主机”

需要澄清这里的评论:

绑定挂载的唯一“问题”是它不会自动将容器内容复制到主机,这与命名卷不同。docs.docker.com/compose/compose-file/#volumes

这准确吗?如果是,那么:

  1. bind mount当使用(在容器重新启动时保留数据)时,如何将容器的“新数据”(例如不断增长的数据库)获取到主机中?
  2. 在此之前,Docker 是如何在容器重启后持久保存数据的named volumes

mount volume docker

6
推荐指数
3
解决办法
5285
查看次数

如何在不挂载默认卷的情况下使用 docker 镜像?

我想使用 Docker MySQL。

docker run mysql

但我不想在主机上保存数据。我希望所有信息都在容器内受到保护。默认情况下,此映像创建了一个未命名的卷,并将其附加到容器。

是否可以使用相同的容器(我不想从地面创建新的 MySQL 映像),但禁用该卷?

换句话说: docker hub 中的许多 Docker 镜像默认使用卷。将所有数据保存在容器内的最简单方法是什么(因此推送和提交将包含数据)?有一个命令可以停止容器,更改其安装设置,然后重新启动?

我知道这不是最佳实践,我的问题是是否可能。

docker

5
推荐指数
1
解决办法
856
查看次数

Docker compose 卷:执行 docker-compose up 时将文件夹从 docker 容器复制到主机

我有这个简单的docker-compose.yaml(图片来自danielemaddaluno/self-service-password):

version: "3"
services:
  ltb:
      image: danielemaddaluno/self-service-password
      ports:
        - 8080:80
      volumes:
        - ./conf:/var/www/html/conf/
Run Code Online (Sandbox Code Playgroud)

目前的行为是:

  • 如果./conf不存在,则在主机上创建
  • 并且空内容被安装在容器中/var/www/html/conf/

我想要的行为是:

  • 如果./conf不存在,则在主机上创建
  • 内容首先从容器加载/var/www/html/conf/(到新创建的./conf主机文件夹)

这可以用 docker compose 实现吗?

yaml docker docker-compose docker-volume

5
推荐指数
1
解决办法
6280
查看次数