Docker 更改命名卷的位置
Docker change location of named volumes
我有一个我无法理解的问题。我正在使用 docker 到 运行 某些容器,但我至少有一个卷有问题,我不想问是否有人可以给我提示我做错了什么。我以 Nifi-Ingestion 为例,但它会影响更多的容器体积。
首先说一下我使用的版本:
- Docker 版本 19.03.8,构建 afacb8b7f0
- docker-compose 版本 1.27.4,build 40524192
- Ubuntu 20.04.1 LTS
现在,让我们展示一下我工作中的音量 docker-compose-file:
在我的容器中,配置如下:
volumes:
- nifi-ingestion-conf:/opt/nifi/nifi-current/conf
在我的 docker-compose 文件下面,它被定义为一个普通的命名卷:
volumes:
nifi-ingestion-conf:
这是 docker-compose 的一个片段,我想开始工作
在我的容器中,在这种情况下配置如下(我的 STORAGE_VOLUME_PATH 定义为 /mnt/storage/docker_data):
volumes:
- ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf
在底部,我想有一些事情要做,但我不知道我需要在这里做什么。在这种情况下,它与工作中的相同 docker-compose:
volumes:
nifi-ingestion-conf:
那么,现在我的问题是什么?
我有两个 docker-compose 文件。一个使用普通的命名卷,一个使用我的额外安装路径中的卷。当我 运行 容器时,卷似乎工作不同,因为文件是以第一种风格编写的,而不是第二种风格。我的挂载路径是在第二个版本中生成的,所以我的.env文件中的环境变量没有任何问题。
提示:/mnt/storage/docker_data 是一个 NFS 挂载,但我的机器拥有该共享的全部权限。
这是我用于挂载该卷的 fstab 条目(也许我必须设置其他选项):
10.1.0.2:/docker/data /mnt/storage/docker_data nfs auto,rw
更大的片段
这里有一个更大的片段,如果 docker-compose(我需要剪切和删除自信的数据,我的问题不是它不起作用,只是体积行为不同。一切为了这一卷在代码里。):
version: "3"
services:
nifi-ingestion:
image: my image on my personal repo
container_name: nifi-ingestion
ports:
- 0000
labels:
- app-specivic
volumes:
- ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf
#working: - nifi-ingestion-conf:/opt/nifi/nifi-current/conf
environment:
- app-specivic
networks:
- cnetwork
volumes:
nifi-ingestion-conf:
networks:
cnetwork:
external: false
ipam:
driver: default
config:
- subnet: 192.168.1.0/24
这里的环境(只有我们使用的值)
STORAGE_VOLUME_PATH=/mnt/storage/docker_data
如果我正确理解你的问题,你想知道为什么以下 docker-compose 片段对你有用
version: "3"
services:
nifi-ingestion:
volumes:
- nifi-ingestion-conf:/opt/nifi/nifi-current/conf
volumes:
nifi-ingestion-conf:
以下 docker-compose 代码段对您不起作用
version: "3"
services:
nifi-ingestion:
volumes:
- ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf
它们的不同之处在于您使用卷的方式。你需要区分 mount host paths and mount named volumes
You can mount a host path as part of a definition for a single service, and there is no need to define it in the top level volumes
key.
But, if you want to reuse a volume across multiple services, then define a named volume in the top-level volumes
key.
命名的卷是 managed by docker
If you start a container with a volume that does not yet exist, Docker creates the volume for you.
另外,建议您阅读
更新:
您可能还想阅读 docker nfs volumes
我有一个我无法理解的问题。我正在使用 docker 到 运行 某些容器,但我至少有一个卷有问题,我不想问是否有人可以给我提示我做错了什么。我以 Nifi-Ingestion 为例,但它会影响更多的容器体积。
首先说一下我使用的版本:
- Docker 版本 19.03.8,构建 afacb8b7f0
- docker-compose 版本 1.27.4,build 40524192
- Ubuntu 20.04.1 LTS
现在,让我们展示一下我工作中的音量 docker-compose-file:
在我的容器中,配置如下:
volumes:
- nifi-ingestion-conf:/opt/nifi/nifi-current/conf
在我的 docker-compose 文件下面,它被定义为一个普通的命名卷:
volumes:
nifi-ingestion-conf:
这是 docker-compose 的一个片段,我想开始工作
在我的容器中,在这种情况下配置如下(我的 STORAGE_VOLUME_PATH 定义为 /mnt/storage/docker_data):
volumes:
- ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf
在底部,我想有一些事情要做,但我不知道我需要在这里做什么。在这种情况下,它与工作中的相同 docker-compose:
volumes:
nifi-ingestion-conf:
那么,现在我的问题是什么?
我有两个 docker-compose 文件。一个使用普通的命名卷,一个使用我的额外安装路径中的卷。当我 运行 容器时,卷似乎工作不同,因为文件是以第一种风格编写的,而不是第二种风格。我的挂载路径是在第二个版本中生成的,所以我的.env文件中的环境变量没有任何问题。
提示:/mnt/storage/docker_data 是一个 NFS 挂载,但我的机器拥有该共享的全部权限。
这是我用于挂载该卷的 fstab 条目(也许我必须设置其他选项):
10.1.0.2:/docker/data /mnt/storage/docker_data nfs auto,rw
更大的片段
这里有一个更大的片段,如果 docker-compose(我需要剪切和删除自信的数据,我的问题不是它不起作用,只是体积行为不同。一切为了这一卷在代码里。):
version: "3"
services:
nifi-ingestion:
image: my image on my personal repo
container_name: nifi-ingestion
ports:
- 0000
labels:
- app-specivic
volumes:
- ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf
#working: - nifi-ingestion-conf:/opt/nifi/nifi-current/conf
environment:
- app-specivic
networks:
- cnetwork
volumes:
nifi-ingestion-conf:
networks:
cnetwork:
external: false
ipam:
driver: default
config:
- subnet: 192.168.1.0/24
这里的环境(只有我们使用的值)
STORAGE_VOLUME_PATH=/mnt/storage/docker_data
如果我正确理解你的问题,你想知道为什么以下 docker-compose 片段对你有用
version: "3"
services:
nifi-ingestion:
volumes:
- nifi-ingestion-conf:/opt/nifi/nifi-current/conf
volumes:
nifi-ingestion-conf:
以下 docker-compose 代码段对您不起作用
version: "3"
services:
nifi-ingestion:
volumes:
- ${STORAGE_VOLUME_PATH}/nifi-ingestion-conf:/opt/nifi/nifi-current/conf
它们的不同之处在于您使用卷的方式。你需要区分 mount host paths and mount named volumes
You can mount a host path as part of a definition for a single service, and there is no need to define it in the top level
volumes
key.But, if you want to reuse a volume across multiple services, then define a named volume in the top-level
volumes
key.
命名的卷是 managed by docker
If you start a container with a volume that does not yet exist, Docker creates the volume for you.
另外,建议您阅读
更新: 您可能还想阅读 docker nfs volumes