我的docker compose文件有三个容器,web,nginx和postgres.Postgres看起来像这样:
postgres:
  container_name: postgres
  restart: always
  image: postgres:latest
  volumes:
    - ./database:/var/lib/postgresql
  ports:
    - "5432:5432
我的目标是安装一个./database与postgres容器内调用的本地文件夹相对应的卷/var/lib/postgres.当我启动这些容器并将数据插入postgres时,我验证/var/lib/postgres/data/base/了我正在添加的数据(在postgres容器中),但是在我的本地系统中,./database只获取了一个data文件夹,即./database/data创建了它,但它是空的.为什么?
笔记:
根据尼克的建议,我做了一个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": ""
        }
    ],
这似乎是数据被另一个我自己编码的卷偷走了.不知道为什么会这样.postgres图像是否为我创建了该卷?如果是这样,当我重新启动时,是否有某种方法可以使用该卷而不是我正在安装的卷?否则,是否有一种很好的方法可以禁用其他卷并使用我自己的卷./database?
我找到了解决方案,感谢尼克!(和另一位朋友)以下答案.
我有一个开发环境,我是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"
我已经在我的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 …为了跟踪docker-compose使用的卷,我喜欢使用命名卷.这适用于"普通"卷
version: 2
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
volumes:
  named_vol:
但我无法弄清楚如何在安装本地主机时使其工作.我正在寻找类似的东西:
version: 2
services: 
  example-app:
    volume:
      -named_homedir:/dir/in/container/volume
volumes:
  named_homedir: /c/Users/
要么
version: 2
services: 
  example-app:
    volume:
      -/c/Users/:/home/dir/in/container/ --name named_homedir
这是以任何可能的方式,还是我坚持使用已安装的匿名卷?
我想将此 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
此命令成功启动容器。
这是我“撰写”的撰写文件:
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"
当我运行时docker compose up(再次,在这里使用 v2),我收到此错误:
服务“ca”指的是未定义的卷步骤:无效的撰写项目
这是解决这个问题的正确方法吗?我想我错过了在 docker compose 项目中创建卷的额外步骤,但我不确定那会是什么,或者这是否是一个有效的用例。
我想通过使用单个撰写文件为 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 …假设我有一个卷,我知道它的名字或ID.
我想确定使用该卷的容器列表(它们的名称或ID).
我可以使用哪些命令来检索此信息?
我认为它可以存储在docker volume inspect <id>命令的输出中,但除了mountpoint("/var/lib/docker/volumes/<id>")之外它没有任何帮助
第一次尝试设置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:
通过卷API创建卷时,也就是说,容器卷模式现在不再是最佳实践了:
# docker volume inspect test-data
[
    {
        "Name": "test-data",
        "Driver": "local",
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data"
    }
]
我想,例如,/ data中存在docker卷(它安装在不同的物理卷中).
这不可能与符号链接有关,可以使用绑定挂载,但我想知道Docker中是否有一些配置来更改每个单独卷的默认位置.
我正在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:
我想知道这是否意味着我必须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/:
我的主要困惑是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 …为什么我会收到此错误? __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