Docker无法访问jar文件 [英] Docker unable to access jar file
问题描述
泊坞窗容器无法访问通过挂载点/my/project/dir
访问的jar文件.我确信这不是权限问题,因为我在本地更改了访问权限,因此它应该能够读取/写入/执行它.
The docker container is not able to access the jar file, that is being accessed over the mount point /my/project/dir
.
I am certain it is not a permission issue, because I changed the access rights locally, so it should be able to read/write/execute it.
这是 Dockerfile
:
FROM tomcat:9-jre8
RUN apt-get update && apt-get install librrds-perl rrdtool -y
VOLUME ["/data/rrdtool", "/my/project/dir"]
ENTRYPOINT [ "java","-jar","/my/project/dir/build/libs/spring-project-0.1.0.jar" ]
这是 docker-compose.yml
文件:
version: '2'
services:
db:
container_name: db1
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: password123
MYSQL_USER: user123
MYSQL_PASSWORD: pasw
MYSQL_DATABASE: mydb
expose:
- "3307"
db2:
container_name: db2
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: password123
MYSQL_USER: user123
MYSQL_PASSWORD: pasw
MYSQL_DATABASE: mydb2
expose:
- "3308"
spring:
container_name: spring-boot-project
build:
context: ./
dockerfile: Dockerfile
links:
- db:db1
- db2:db2
depends_on:
- db
- db2
expose:
- "8081"
ports:
- "8081:8081"
restart: always
这是 docker-compose logs spring
的输出:
Error: Unable to access jarfile /my/project/dir/build/libs/spring-project-0.1.0.jar
推荐答案
我看不到您将 jar
复制到容器中的任何位置.您应该尝试将 VOLUME
声明从 Dockerfile
移到 compose
文件到 spring
服务中,如下所示:>
I don't see you copying the jar
into the container anywhere. You should try moving a VOLUME
declaration from Dockerfile
to the compose
file into the spring
service like this:
volumes:
- /my/project/dir:/app
然后在Dockerfile中,您应指向目录:
And then inside Dockerfile you should point to the dir:
ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
例如,如果以后要部署它,则应将项目文件直接复制到映像中,而不要使用 volumes
方法.因此,您可以在 Dockerfile
中执行以下操作:
Later on if you'd like to deploy it (for example) you should copy the project files directly into the image instead of utilizing the volumes
approach. So in Dockerfile
you'd then do:
COPY . /app
而不是 VOLUME [..]
将它们放在一起:
发展情况:
Dockerfile:
Dockerfile:
FROM tomcat:9-jre8
RUN apt-get update && apt-get install librrds-perl rrdtool -y
ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
撰写文件:
version: '2'
services:
[..]
spring:
container_name: spring-boot-project
build: .
links:
- db:db1
- db2:db2
depends_on:
- db
- db2
ports:
- "8081:8081"
restart: always
volumes:
- /my/project/dir:/app
部署:
Dockerfile(放置在项目文件夹中,docker build要求其构建上下文位于当前目录中)
Dockerfile (that is placed inside project's folder, docker build requires it's build context to be in a current directory):
FROM tomcat:9-jre8
RUN apt-get update && apt-get install librrds-perl rrdtool -y
COPY . /app
ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
撰写文件:
version: '2'
services:
[..]
spring:
container_name: spring-boot-project
build: .
links:
- db:db1
- db2:db2
depends_on:
- db
- db2
expose:
- "8081"
这篇关于Docker无法访问jar文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!