繁体   English   中英

何时可以使用 docker compose 获取 docker volume?

[英]when is docker volume available using docker compose?

我对 Docker 比较陌生。 我有一个创建卷的 docker-compose.yml 文件。 在我的其中一个 Dockerfile 中,我通过列出卷的内容来检查是否创建了该卷。 我收到一条错误消息,说该卷不存在。 使用 docker compose 时,卷何时真正可用?

这是我的 docker-compse.yml:

version: "3.7"
services:
  app-api:
    image: api-dev
    container_name: api
    build:
      context: .
      dockerfile: ./app-api/Dockerfile.dev
    ports:
      - "5000:5000"
    volumes:
      - ../library:/app/library
    environment:
      ASPNETCORE_ENVIRONMENT: Development

我还需要在创建容器时提供可用的卷,因为我在 dotnet restore 命令中使用了它。

这是我的 Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS api-env

#list volume contents
RUN ls -al /app/library

WORKDIR /app/app-api

COPY ./app-api/*.csproj .

#need to have volume created before this command
RUN dotnet restore --source https://api.nuget.org/v3/index.json --source /app/library

#copies all files into current directory
COPY ./app-api/. .
RUN dotnet run Api.csproj
EXPOSE 5000
RUN echo "'dotnet running'"

我想通过添加-volumes: ....到 docker-compose.yml 它会自动创建卷。 我还需要在我的 Dockerfile 中添加创建卷命令吗?

特尔;博士:

  • 您在RUN中给出的命令在安装卷之前执行。
  • CMD安装卷执行。

更长的答案

Dockerfile 用于构建容器的镜像。 然后将在docker-compose.yml文件中使用该图像来启动一个容器,一个卷将连接到该容器。 您正在执行的RUN命令在构建映像时执行,因此它无法访问该卷。

您通常会发出一组RUN命令,这些命令将准备容器映像。 最后,您将定义一个CMD命令,该命令将根据此映像告诉当容器启动时应执行什么程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM