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

标签 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

有什么想法可以实现吗?

最佳答案

Dockerfile 包含创建镜像的指令。镜像构建完成后,镜像可以作为容器运行。

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

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

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

关于Docker容器无法将文件复制到卷中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55070725/

相关文章:

mysql - 为什么 MySQL docker 容器忽略 MYSQL_DATABASE env var?

ubuntu - Docker 容器卷不写入主机

windows - 无法在 Docker 中停止 jupyterhub?

docker - 由于 'accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0..',Ignite TcpDiscoverySpi 失败并出现 SocketTimeout 的严重系统错误

docker - “Can not connect to Docker Daemon”

docker - 两个相同的 Docker 镜像怎么可能安装不同的软件包?

docker - 我什么时候需要Docker Volumes?

docker - Docker 中的绑定(bind)挂载和主机卷是一样的吗?

docker - 如何将文件卷挂载到远程 docker 守护进程?