[英]Docker unable to access jar file without docker-compose
[英]Docker unable to access jar file
docker 容器無法訪問通過掛載點/my/project/dir
訪問的 jar 文件。 我確定這不是權限問題,因為我在本地更改了訪問權限,所以它應該能夠讀/寫/執行它。
這是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
服務中,如下所示:
volumes:
- /my/project/dir:/app
然后在Dockerfile中,您應該指向目錄:
ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
以后,如果您想部署它(例如),則應將項目文件直接復制到映像中,而不要使用volumes
方法。 因此,在Dockerfile
您需要執行以下操作:
COPY . /app
代替VOLUME [..]
放在一起:
發展:
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要求其build上下文位於當前目錄中):
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"
如果您使用Spring-Boot
項目和Maven
構建。 試試下面
Dockerfile 。
FROM maven:3.8.4-openjdk-17 as maven-builder
COPY src /app/src
COPY pom.xml /app
RUN mvn -f /app/pom.xml clean package -DskipTests
FROM openjdk:17-alpine
COPY --from=maven-builder app/target/dockube-spring-boot.jar /app-service/dockube-spring-boot.jar
WORKDIR /app-service
EXPOSE 8080
ENTRYPOINT ["java","-jar","dockube-spring-boot.jar"]
dockube-spring-boot.jar // 替換為您生成的 jar 名稱
這是可用的示例代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.