docker compose up '无法访问jarfile'

kpbpu008  于 2023-10-16  发布在  Docker
关注(0)|答案(2)|浏览(165)

我尝试用Docker运行我的应用程序
Dockerfile

  1. FROM openjdk:latest
  2. CMD ["./mvmw", "clean", "package"]
  3. COPY target/doIt-0.0.1.jar app.jar
  4. RUN chmod 755 app.jar
  5. ENTRYPOINT ["java", "-jar", "app.jar"]

docker-compose.yml

  1. version: '3'
  2. services:
  3. application:
  4. container_name: doIt_service
  5. build:
  6. dockerfile: Dockerfile
  7. ports:
  8. - "8081:8081"
  9. volumes:
  10. - ./:/app
  11. working_dir: /
  12. command: ["java", "-jar", "app.jar"]
  13. restart: always

它工作,但

  1. app.jar是位置根目录
    1./app/中的所有项目文件
    所以我换了文件
  1. FROM openjdk:latest
  2. CMD ["./mvmw", "clean", "package"]
  3. COPY target/doIt-0.0.1.jar /app/app.jar
  4. RUN chmod 755 /app/app.jar
  5. ENTRYPOINT ["java", "-jar", "/app/app.jar"]

  1. version: '3'
  2. services:
  3. application:
  4. container_name: doIt_service
  5. build:
  6. dockerfile: Dockerfile
  7. ports:
  8. - "8081:8081"
  9. volumes:
  10. - ./:/app
  11. working_dir: /app
  12. command: ["java", "-jar", "/app/app.jar"]
  13. restart: always

比我类型docker compose up它不工作!!(错误消息:“无法访问jarfile/app/app. jar”)
我在docker中浏览“查看文件”,显示文件是正确的位置'app/app.jar'
为什么不工作?我有什么错?
我想把/app. jar改成/app/app. jar
我不喜欢根目录中的“app.jar”

xwbd5t1u

xwbd5t1u1#

您可以在Dockerfile中更改WORKDIR。这将设置当前目录,即COPY将复制到的目录和当前目录(当您说java -jar app.jar时)。我会把这个指令放在第一个COPY行之前。WORKDIR在目录不存在的情况下创建该目录,并且您不需要RUN mkdir

  1. FROM openjdk:latest
  2. WORKDIR /app
  3. COPY target/doIt-0.0.1.jar app.jar
  4. ENTRYPOINT ["java", "-jar", "app.jar"]

您也不需要RUN chmod文件(您不直接将其作为./app.jar运行),也不需要设置CMD(传递给ENTRYPOINT的参数)。
在Compose文件中,您需要依次删除volumes:块,该块替换图像中的/app并注入您不想要的内容。你还有其他一些不必要的选择。我会把它修剪成

  1. version: '3.8'
  2. services:
  3. application:
  4. build: .
  5. ports:
  6. - "8081:8081"
  7. restart: always

其他选项要么覆盖默认的Compose提供(container_name:build: { dockerfile: }),要么覆盖Dockerfile中的内容(working_dir:command:),可以安全地删除。

展开查看全部
fivyi3re

fivyi3re2#

您将jar复制到/app/app. jar,但之后在docker-compose.yaml中,您将在/app中安装卷,这将替换所有内容,而app.jar不再存在。

  • 如果您只需要jar而不需要源代码中的其他文件,一种解决方案是删除卷
  1. version: '3'
  2. services:
  3. application:
  4. container_name: doIt_service
  5. build:
  6. dockerfile: Dockerfile
  7. ports:
  8. - "8081:8081"
  9. working_dir: /app
  10. command: ["java", "-jar", "/app/app.jar"]
  11. restart: always
  • 另一种选择是对jar使用不同的目录,对jar和/code使用/app
  • 另一种选择是复制应用程序的内容并从docker-compose.yaml中删除卷
  1. CMD ["./mvmw", "clean", "package"]
  2. RUN mkdir -p /app
  3. COPY ./ /app
  4. COPY target/doIt-0.0.1.jar /app/app.jar
  5. RUN chmod 755 /app/app.jar
  6. ENTRYPOINT ["java", "-jar", "/app/app.jar"]
  1. version: '3'
  2. services:
  3. application:
  4. container_name: doIt_service
  5. build:
  6. dockerfile: Dockerfile
  7. ports:
  8. - "8081:8081"
  9. working_dir: /app
  10. command: ["java", "-jar", "/app/app.jar"]
  11. restart: always
展开查看全部

相关问题