运行 命令无法访问卷
RUN command cannot access volumes
在 dockerfile
中似乎 RUN
看不到我的卷目录,而 ENTRYPOINT
可以。
这是一个 dockerfile
和 docker-compose.yml
出现问题的示例:
FROM microsoft/dotnet:2.0-sdk
EXPOSE 5000
ENV ASPNETCORE_ENVIRONMENT=Development
WORKDIR /src/testing
RUN dotnet restore
ENTRYPOINT ["dotnet", "run", "--urls=http://0.0.0.0:5000"]
docker-compose.yml
:
version: "3.4"
services:
doctnetcore-api-project:
build: ./api/
container_name: doctnetcore-api-project
image: doctnetcore-api-project:development
restart: 'always'
networks:
- mynetwork
volumes:
- /api/src:/src
networks:
mywebmc:
external:
name: mynetwork
当我 运行 docker-compose up
我得到如下所示的错误:
MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.
ERROR: Service 'doctnetcore-api-project' failed to build: The command '/bin/sh -c dotnet restore' returned a non-zero code: 1
如果我在 运行 宁 docker-compose
之前手动注释掉 RUN dotnet restore
和 运行 dotnet restore
,它工作正常。
因此无论出于何种原因,它出现 RUN
看不到我的卷目录并且 ENTRYPOINT
可以看到我的卷目录。
Dockerfile 中的语句在构建时 (docker build
) 执行,此时没有卷存在。
相比之下,ENTRYPOINT
是在您 运行 一个可以访问潜在映射卷的容器 (docker run
) 时执行的。
在 dockerfile
中似乎 RUN
看不到我的卷目录,而 ENTRYPOINT
可以。
这是一个 dockerfile
和 docker-compose.yml
出现问题的示例:
FROM microsoft/dotnet:2.0-sdk
EXPOSE 5000
ENV ASPNETCORE_ENVIRONMENT=Development
WORKDIR /src/testing
RUN dotnet restore
ENTRYPOINT ["dotnet", "run", "--urls=http://0.0.0.0:5000"]
docker-compose.yml
:
version: "3.4"
services:
doctnetcore-api-project:
build: ./api/
container_name: doctnetcore-api-project
image: doctnetcore-api-project:development
restart: 'always'
networks:
- mynetwork
volumes:
- /api/src:/src
networks:
mywebmc:
external:
name: mynetwork
当我 运行 docker-compose up
我得到如下所示的错误:
MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.
ERROR: Service 'doctnetcore-api-project' failed to build: The command '/bin/sh -c dotnet restore' returned a non-zero code: 1
如果我在 运行 宁 docker-compose
之前手动注释掉 RUN dotnet restore
和 运行 dotnet restore
,它工作正常。
因此无论出于何种原因,它出现 RUN
看不到我的卷目录并且 ENTRYPOINT
可以看到我的卷目录。
Dockerfile 中的语句在构建时 (docker build
) 执行,此时没有卷存在。
相比之下,ENTRYPOINT
是在您 运行 一个可以访问潜在映射卷的容器 (docker run
) 时执行的。