我是 docker 的新手,所以我可能做错了什么
我需要使用 docker compose 文件在 docker 容器之间共享一些文件
我已经创建了一个这样的卷
docker volume create shared
之后我可以检查创建的卷
docker volume inspect shared
[
{
"CreatedAt": "2019-03-08T14:54:57-05:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/shared/_data",
"Name": "shared",
"Options": {},
"Scope": "local"
}
]
我的 docker-compose.yaml 文件是这样的
version: '3.1'
services:
service1:
build:
context: Service1
dockerfile: Dockerfile
restart: always
container_name: server1-server
volumes:
- shared:/shared
service2:
build:
context: Service2
dockerfile: Dockerfile
restart: always
container_name: server2-server
volumes:
- shared:/shared
volumes:
shared:
external: true
Dockerfile 看起来像这样(仅用于测试目的)
FROM microsoft/dotnet:2.2-sdk AS build-env
RUN echo "test" > /shared/test.info
当我发出 docker-compose up 命令时,我得到这个错误
/bin/sh: 1: cannot create /shared/test.info: Directory nonexistent
如果我将 Dockerfile 修改成这个
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app
COPY *.csproj ./
RUN cp *.csproj /shared/
我收到这个错误
cp: cannot create regular file '/shared/': Not a directory
有什么想法可以实现吗?
最佳答案
Dockerfile 包含创建镜像的指令。镜像构建完成后,镜像可以作为容器运行。
启动容器时会附加一个卷。
因此,在构建镜像时使用 Dockerfile 指令将文件复制到卷中是没有意义的。
卷通常用于在容器之间共享运行时数据,或者在容器停止后保留数据。
关于Docker容器无法将文件复制到卷中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55070725/