![](/img/trans.png)
[英]When file from volume in the docker-compose becomes available in Dockerfile?
[英]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.