标签: docker-volume

如何使用卷在dockerized postgres数据库中保存数据

我的docker compose文件有三个容器,web,nginx和postgres.Postgres看起来像这样:

postgres:
  container_name: postgres
  restart: always
  image: postgres:latest
  volumes:
    - ./database:/var/lib/postgresql
  ports:
    - "5432:5432
Run Code Online (Sandbox Code Playgroud)

我的目标是安装一个./database与postgres容器内调用的本地文件夹相对应的卷/var/lib/postgres.当我启动这些容器并将数据插入postgres时,我验证/var/lib/postgres/data/base/了我正在添加的数据(在postgres容器中),但是在我的本地系统中,./database只获取了一个data文件夹,即./database/data创建了它,但它是空的.为什么?

笔记:

更新1

根据尼克的建议,我做了一个docker inspect并发现:

    "Mounts": [
        {
            "Source": "/Users/alex/Documents/MyApp/database",
            "Destination": "/var/lib/postgresql",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
            "Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
            "Destination": "/var/lib/postgresql/data",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ],
Run Code Online (Sandbox Code Playgroud)

这似乎是数据被另一个我自己编码的卷偷走了.不知道为什么会这样.postgres图像是否为我创建了该卷?如果是这样,当我重新启动时,是否有某种方法可以使用该卷而不是我正在安装的卷?否则,是否有一种很好的方法可以禁用其他卷并使用我自己的卷./database

更新2

我找到了解决方案,感谢尼克!(和另一位朋友)以下答案.

postgresql docker docker-compose docker-volume

166
推荐指数
4
解决办法
11万
查看次数

如何在docker compose中将主机目录挂载为卷

我有一个开发环境,我是dockerizing,我希望能够重新生成我的更改,而无需重建docker镜像.我正在使用docker compose,因为redis是我应用程序的依赖项之一,我喜欢能够链接redis容器

我有两个容器定义docker-compose.yml:

node:
    build: ./node
    links:
        - redis
    ports:
        - "8080"
    env_file:
        - node-app.env

redis:
    image: redis
    ports:
        - "6379"
Run Code Online (Sandbox Code Playgroud)

我已经在我的node应用程序的dockerfile中添加了一个卷,但是如何在卷中安装主机的目录,以便我对代码的所有实时编辑都反映在容器中?

这是我当前的Dockerfile:

# Set the base image to Ubuntu
FROM    node:boron

# File Author / Maintainer
MAINTAINER Amin Shah Gilani <amin@gilani.me>

# Install nodemon
RUN npm install -g nodemon

# Add a /app volume
VOLUME ["/app"]

# TODO: link the current . to /app

# Define working directory
WORKDIR /app

# Run npm install
RUN …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-volume

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

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 Compose 未定义卷

我想将此 docker CLI 命令(来自Smallstep/step-ca)转换为 docker-compose.yml 文件以运行docker compose(版本 2):

docker run -d -v step:/home/step \
    -p 9000:9000 \
    -e "DOCKER_STEPCA_INIT_NAME=Smallstep" \
    -e "DOCKER_STEPCA_INIT_DNS_NAMES=localhost,$(hostname -f)" \
    smallstep/step-ca
Run Code Online (Sandbox Code Playgroud)

此命令成功启动容器。

这是我“撰写”的撰写文件:

version: "3.9"
services:
  ca:
    image: smallstep/step-ca
    volumes:
      - "step:/home/step"
    environment:
      - DOCKER_STEPCA_INIT_NAME=Smallstep
      - DOCKER_STEPCA_INIT_DNS_NAMES=localhost,ubuntu
    ports:
      - "9000:9000"
Run Code Online (Sandbox Code Playgroud)

当我运行时docker compose up(再次,在这里使用 v2),我收到此错误

服务“ca”指的是未定义的卷步骤:无效的撰写项目

这是解决这个问题的正确方法吗?我想我错过了在 docker compose 项目中创建卷的额外步骤,但我不确定那会是什么,或者这是否是一个有效的用例。

docker docker-compose docker-volume

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

错误:在服务“dsearch”中使用了命名卷“xplore:/root/xPlore/rtdata:rw”,但未在卷部分找到声明

我想通过使用单个撰写文件为 tomcat、documentum content server 和 documentum xplore 创建容器。由于 docker-compose.yml 文件中提到的卷,我面临着问题。能够通过单独执行撰写文件来启动服务。问题是当我尝试将撰写文件合并在一起时。想知道如何使用 docker compose 运行带有卷的多个容器。

以下是单个撰写文件:

  version: '2'
  networks:
          default:
            external:
              name: dctmcs_default
  services:
    dsearch:
      image: xplore_ubuntu:1.6.0070.0058
      container_name: dsearch
      hostname: dsearch
      ports:
        - "9300:9300"
      volumes:
        - xplore:/root/xPlore/rtdata
    indexagent:
    image: indexagent_ubuntu:1.6.0070.0058
    container_name: indexagent_1
    hostname: indexagent_1
    ports:
      - "9200:9200"
    environment:
      - primary_addr=dsearch
      - docbase_name=centdb
      - docbase_user=dmadmin
      - docbase_password=password
      - broker_host=contentserver
      - broker_port=1689
    depends_on:
      - dsearch
    volumes_from:
      - dsearch
volumes:
   xplore: {}
 tomcat_8:
   image: tomcat_8.0:ccms
   container_name: appserver
   hostname: appserver
   ports:
     - "9090:8080"
 contentserver:
   image: contentserver_ubuntu:7.3.0000.0214 …
Run Code Online (Sandbox Code Playgroud)

linux docker docker-compose docker-volume documentum7.3

37
推荐指数
3
解决办法
2万
查看次数

如何确定哪些容器使用docker卷?

假设我有一个卷,我知道它的名字或ID.

我想确定使用该卷的容器列表(它们的名称或ID).

我可以使用哪些命令来检索此信息?

我认为它可以存储在docker volume inspect <id>命令的输出中,但除了mountpoint("/var/lib/docker/volumes/<id>")之外它没有任何帮助

docker docker-volume docker-container

27
推荐指数
3
解决办法
6581
查看次数

services.volumes的配置选项不受支持

第一次尝试设置docker,我遇到卷问题.我非常有信心.yml中的间距和格式在这一点上是正确的.

我尝试过版本3,3.1,3.2,3.3和3.4.所有都收到相同的错误消息(如下)

services.volumes不支持的配置选项:'db2_prod'

version: '3'

services:
   liberty:
     image: liberty:${liberty_tag}
     ports:
       - "${liberty_ip}:9080:9080"
       - "${liberty_ip}:9443:9443"
     restart: always

   apache:
     image: webapp:${apache_tag}
     ports:
       - "${apache_ip}:80:80"
       - "${apache_ip}:443:443"
     restart: always

   db2:
     image: db2:${db2_tag}
     ports:
       - "${db2_ip}:50000:50000"
     stdin_open: true
     tty: true
     restart: always
     volumes:
       - db2_prod:/database/stagg3

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

containers docker docker-compose docker-volume

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

如何更改"docker create volume"命令的默认位置?

通过卷API创建卷时,也就是说,容器卷模式现在不再是最佳实践了:

# docker volume inspect test-data
[
    {
        "Name": "test-data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data"
    }
]
Run Code Online (Sandbox Code Playgroud)

我想,例如,/ data中存在docker卷(它安装在不同的物理卷中).

这不可能与符号链接有关,可以使用绑定挂载,但我想知道Docker中是否有一些配置来更改每个单独卷的默认位置.

docker docker-volume

24
推荐指数
3
解决办法
3万
查看次数

在 docker-compose.yaml 中定义卷

我正在docker-compose.yaml为我的项目编写一个文件。我已经检查了这里的卷文档。

我还了解 docker 中的概念volume,即我可以安装卷,例如主机上的目录在 -v my-data/:/var/lib/db哪里,而数据库容器内的路径在哪里。my-data//var/lib/db

我的困惑在于我上面放置的链接。那里有以下示例:

version: "3.9"

services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
  backup:
    image: backup-service
    volumes:
      - data-volume:/var/lib/backup/data

volumes:
  data-volume:
Run Code Online (Sandbox Code Playgroud)

我想知道这是否意味着我必须data-volume在我的主机上创建一个名为的目录?如果我的计算机上有一个带有路径的目录temp/my-data/,并且我想将该路径挂载到数据库容器, 该怎么办/var/lib/db?我应该做下面这样的事情吗?

version: "3.9"

services:
  db:
    image: db
    volumes:
      - temp/my-data/:/var/lib/db

volumes:
  temp/my-data/:
Run Code Online (Sandbox Code Playgroud)

我的主要困惑是volumes:底部的部分,我不确定卷名是否应该是我的目录的路径,或者应该只是我给出的字面名称,如果是后一种情况,那么给定的名称如何映射temp/my-data/在我的机器上?该示例并未表明 & 含糊不清,以澄清这一点。

有人可以帮我澄清一下吗?

PS我尝试使用上面的 docker-compose 我猜,最终出现错误:

ERROR: The Compose file './docker-compose.yaml' is invalid because:
volumes value 'temp/my-data/' does not match any of …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-volume

21
推荐指数
2
解决办法
5万
查看次数

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

为什么我会收到此错误? __CODE__

我的docker-compose文件几乎与此相同:https://docs.docker.com/compose/wordpress/

version: '2'
services:
  wordpress:
    image: wordpress:latest
    restart: always
    depends_on:
      - db
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example
      WORDPRESS_DB_HOST: 3306
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - maria_volume: /var/lib/mysql
volumes:
  maria_volume: ~/mariadb
Run Code Online (Sandbox Code Playgroud)

wordpress docker-compose docker-volume

20
推荐指数
4
解决办法
3万
查看次数