【问题标题】:Docker compose host volume directory emptyDocker compose 主机卷目录为空
【发布时间】:2020-08-29 23:21:09
【问题描述】:

我已运行docker-compose up -d 命令,但主机上的卷目录为空。

  1. Ubuntu 20.04
  2. docker-compose up -d
  3. 页面按预期显示在浏览器中
  4. docker volume inspect 显示:
    {
        "CreatedAt": "2020-08-29T22:26:49+01:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/magento-sandbox_magento_data/_data",
        "Name": "magento-sandbox_magento_data",
        "Options": null,
        "Scope": "local"
    }
]
  1. 图片:https://hub.docker.com/r/bitnami/magento/
  2. yml 文件 (/home/tomas/Documents/Projects/Magento/magento-sandbox):
version: '2'
services:
  mariadb:
    image: 'docker.io/bitnami/mariadb:10.3-debian-10'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=tomas
      - MARIADB_PASSWORD=tomas
      - MARIADB_DATABASE=magento_sandbox
    volumes:
      - 'mariadb_data:/home/tomas/Documents/Projects/Magento/magento-sandbox/db'
  magento:
    image: 'docker.io/bitnami/magento:2-debian-10'
    environment:
      - MARIADB_HOST=mariadb
      - MARIADB_PORT_NUMBER=3306
      - MAGENTO_DATABASE_USER=tomas
      - MAGENTO_DATABASE_PASSWORD=tomas
      - MAGENTO_DATABASE_NAME=magento_sandbox
      - ELASTICSEARCH_HOST=elasticsearch
      - ELASTICSEARCH_PORT_NUMBER=9200
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - 'magento_data:/home/tomas/Documents/Projects/Magento/magento-sandbox/webroot'
    depends_on:
      - mariadb
      - elasticsearch
  elasticsearch:
    image: 'docker.io/bitnami/elasticsearch:6-debian-10'
    volumes:
      - 'elasticsearch_data:/home/tomas/Documents/Projects/Magento/magento-sandbox/elasticsearch/data'
volumes:
  elasticsearch_data:
    driver: local
  mariadb_data:
    driver: local
  magento_data:
    driver: local
  1. 所有容器都在运行(docker ps 命令验证这一点)

为什么我的 /home/tomas/Documents/Projects/Magento/magento-sandbox/webroot 是空的?我的意思是为什么 mountpoint 没有反映文件中的配置?

如何实现该目录包含浏览器中用于呈现页面的所有文件的结果?

【问题讨论】:

  • 您似乎不知道卷映射的实际工作方式,是吗?冒号前的左侧是主机端,可以是路径或命名卷的名称。冒号后面的右边是容器端,是容器内部的一条路径。容器端的值应与 dockerhub 描述匹配 - 除非您知道如何配置容器内的应用程序以使用您的自定义容器路径。
  • 是的,我一发布问题就注意到了这一点。但我无法对此进行测试,因为我的 elasticsearch 容器拒绝存活......但是我已经在我的 Mac 上更新了 yaml(Ubuntu 是一个 VM),但目录仍然是空的......

标签: docker ubuntu magento docker-compose docker-volume


【解决方案1】:

嗯,您确实创建了卷,但您没有为它们分配任何源路径。因此它们存储在默认路径中。 (在 ubuntu 下我知道它是 /var/lib/docker/volumes/HERE)。无论如何,您必须找出要挂载的数据在 docker 机器上的存储位置。 (您通常在 dockerfiles 中设置路径)

不管怎样,正确的语法是

/path/to/host/machine:/path/in/container/machine

一旦你发现了,继续在你的目录中创建一个 .env 文件来存储你的容器和组合。它包含

HOST_BASE_DATA_PATH=/home/tomas/Documents/Projects/Magento/magento-sandbox
MAGENTO_DATA_PATH=/insert/the/path/inside/the/magento/container
ELASTICSEARCH_DATA_PATH=/insert/the/path/inside/the/elastic/container
MARIADB_DATA_PATH=/insert/the/path/inside/the/mariadb/container

我们将使用这些变量来获得一个更干净的 docker-compose 文件。

在您的撰写中,我们将使用以下属性指定卷: (我希望举个例子就足够清楚了)

mariadb:
    image: 'docker.io/bitnami/mariadb:10.3-debian-10'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - MARIADB_USER=tomas
      - MARIADB_PASSWORD=tomas
      - MARIADB_DATABASE=magento_sandbox
    volumes:
      - type: bind
        # where it will be stored on the host machine
        source: ${HOST_BASE_DATA_PATH}/mariadb
        # where it is stored on the docker container
        target: ${MARIADB_DATA_PATH}

问候

【讨论】:

  • 我把它改成了:volumes: - type: bind source: /Users/tomas/Documents/Projects/Magento/magento-sandbox target: /webroot top line: version: '2.4' 做了重组,没有运气
【解决方案2】:

我已经设法找到了问题,结果是多个问题。

  1. 正如指出的那样,我的安装路径不正确
  2. 我也更改了 docker 路径,但它们应该保持不变。我不知道这些必须是首先定义的
  3. 一旦我解决了前两个问题,我需要仔细检查我用于主机的目录是否需要为空或根本不存在(不确定这是否是一个问题,但当我确定它是空的时成功了)
  4. 我的 elasticsearch 构建失败,因此阻止了进一步的 webroot 开发

我已经解决了所有这些问题,而且效果很好。然而,在所有启动和运行之后,我的弹性搜索再次失败,但这是另一个问题,与这个问题无关。

谢谢你们,伙计们,你们的支持和努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多