Docker容器无法将文件复制到卷中

时间:2019-03-08 20:43:34

标签: docker docker-volume

我对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

任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

Dockerfile包含创建映像的指令。构建映像后,可以将其作为容器运行。

启动容器时会附加一个卷。

因此,在构建映像时使用Dockerfile指令将文件复制到卷中是没有意义的。

卷通常用于在容器之间共享运行时数据,或在容器停止后保留数据。