使用以下docker-compose.yml
文件:
test:
build: ../../
dockerfile: docker/dev/Dockerfile
volumes_from:
- cachev
cachev:
build: ../../
dockerfile: docker/dev/Dockerfile
volumes:
- /build
entrypoint: "true"
cachev
上面文件中的服务启动了卷容器,该卷容器/var/lib/docker/
在Docker主机的文件夹中创建了匿名卷,并/cache
在卷容器(xx_cachev
)中创建了挂载点。
服务中的volumes_from
指令是否在容器中test
创建/build
安装点xx_test
?这点/build
挂载点xx_cachev
的容器?
从volumes_from
文档:
从另一个服务或容器挂载所有卷…
所以简短的答案 是 :
volumes_from``/build
在cachev
服务内部 装入由服务定义的卷test
。
长答案:
要回答您的问题,让我们运行该test
服务:
docker compose up test
在回答您的问题之前,让我们确保描述清楚:
上面文件中的cachev服务启动卷容器…
这只是常规容器,由于会立即退出entrypoint: "true"
。
docker ps -a
应该显示:
ac68a33abe59 cache "true" 16 hours ago Exited (0) 4 minutes ago cache_1
但在退出之前,它会创建中指定的卷volumes:
。因此,如果其他服务使用其卷(例如进行缓存),我们可以将其称为卷容器。
在Docker主机的/ var / lib / docker /文件夹中创建匿名卷
同意。- /build
是匿名卷。可以通过查看所有容器安装来验证:
docker inspect [cachev_container_id] --format '{{json .Mounts}}' | jq
应该显示如下内容:
{
"Type": "volume",
"Name": "1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378",
"Source": "/var/lib/docker/volumes/1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378/_data",
"Destination": "/build",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
jq
是在bash中处理json的好工具。安装它以使上面的命令起作用。
并在卷容器(xx_cachev)中创建安装点/ cache。
在cachev:
您提供的服务规格中看不到任何安装迹象。
如果将映射添加- /tmp/cache:/cache
到其volumes
部分,然后docker compose up test
再次运行并检查退出的容器,则应该看到:
{
"Type": "bind",
"Source": "/tmp/cache",
"Destination": "/cache",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
请注意,docker inspect [cachev_service_id] --format '{{json .Mounts}}' | jq
它将显示所有容器安装座,包括docker/dev/Dockerfile
使用VOLUME
说明中指定的安装座。
为了 回答您的问题, 我们需要检查test
服务容器:
docker inspect [test_container_id] --format '{{json .Mounts}}' | jq
:
将显示所有指定的卷(docker/dev/Dockerfile
如果有的话)以及所有cachev
多亏了volumes_from
指令的卷。
您可以看到test
和cache
容器都具有:
{
"Type": "volume",
"Name": "1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378",
"Source": "/var/lib/docker/volumes/1ec7ff7c72bfb5a3259ed54be5b156ea694be6c8d932bcb3fa6e657cbcaea378/_data",
"Destination": "/build",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
在他们的坐骑中,这个体积在随后的 docker compose up test
问题内容: 您能否提供一个示例,说明使用容器A到容器B 共享路径,以及容器B在共享完成后如何访问该路径。 谢谢 问题答案: 由于文件说,卷,如果你在你可以用定义一个名为体积低于EE代码,你可以在每一个服务像这样引用它: 2.0版: 允许您从另一个服务或容器挂载所有数据或卷,则必须指定访问级别,以如何在代码中使用文档说明卷如何使用: 要在上面的代码中定义一个卷服务,然后可以在另一个容器中使用,例如,
问题内容: 当我涉及此示例撰写文件时,我正在设置一些培训材料: https://github.com/dockersamples/example-voting-app/blob/master/docker- compose.yml 而且我找不到文件的第48和49行上如何安装该卷: 有人可以向我解释主机上的该卷在哪里吗?找不到它,我不希望在容器消失后保持任何postgresql数据悬挂。网络发生了类
问题内容: 我正在运行一个简单的rest应用程序,并在docker容器/ docker-compose中运行。我相信,必须使用Spring Boot才能访问。但是,它会引发错误: 我的代码在这里。 问题答案: 由于在链接中使用别名,因此必须使用与别名相同的主机名来访问容器。因此,您可以执行以下一项操作, 在您的Spring Boot应用程序中使用http:// localhost:6379 而不是
我有一个nginx的dockerfile。 我有一个docker-compose.yml文件。 运行后 docker合成 它从名为“web”的dockerfile创建图像,并下载redis图像。它还创建了名为“web\u web1”的图像和当我检查 docker ps nginx和redis服务都在运行。我的问题是,如果我将新创建的映像提交到另一个映像并导出容器并导入到另一个环境,在执行docke
问题内容: 我想使用docker-compose在“主机”网络中生成3个服务。这是我的docker-compose.yml文件: 我收到以下错误: 我在Windows上使用boot2docker。 Docker和Docker-compose版本: 如果我通过使用所有内容手动运行所有服务,则一切正常。 在文档中,我读到 docker-compose支持* net 命令: * 净 联网模式。使用与do
我需要向容器中添加额外的主机。这是docker编写的文件 我在本地启动容器,并在应用程序中记录 /etc/hosts。如果我用启动容器,我可以看到额外的主机添加到 /etc/hosts 如果我启动容器通过