我尝试用Docker运行我的应用程序
Dockerfile
FROM openjdk:latest
CMD ["./mvmw", "clean", "package"]
COPY target/doIt-0.0.1.jar app.jar
RUN chmod 755 app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
docker-compose.yml
version: '3'
services:
application:
container_name: doIt_service
build:
dockerfile: Dockerfile
ports:
- "8081:8081"
volumes:
- ./:/app
working_dir: /
command: ["java", "-jar", "app.jar"]
restart: always
它工作,但
- app.jar是位置根目录
1./app/中的所有项目文件
所以我换了文件
FROM openjdk:latest
CMD ["./mvmw", "clean", "package"]
COPY target/doIt-0.0.1.jar /app/app.jar
RUN chmod 755 /app/app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
和
version: '3'
services:
application:
container_name: doIt_service
build:
dockerfile: Dockerfile
ports:
- "8081:8081"
volumes:
- ./:/app
working_dir: /app
command: ["java", "-jar", "/app/app.jar"]
restart: always
比我类型docker compose up
它不工作!!(错误消息:“无法访问jarfile/app/app. jar”)
我在docker中浏览“查看文件”,显示文件是正确的位置'app/app.jar'
为什么不工作?我有什么错?
我想把/app. jar改成/app/app. jar
我不喜欢根目录中的“app.jar”
2条答案
按热度按时间xwbd5t1u1#
您可以在Dockerfile中更改
WORKDIR
。这将设置当前目录,即COPY
将复制到的目录和当前目录(当您说java -jar app.jar
时)。我会把这个指令放在第一个COPY
行之前。WORKDIR
在目录不存在的情况下创建该目录,并且您不需要RUN mkdir
。您也不需要
RUN chmod
文件(您不直接将其作为./app.jar
运行),也不需要设置CMD
(传递给ENTRYPOINT
的参数)。在Compose文件中,您需要依次删除
volumes:
块,该块替换图像中的/app
并注入您不想要的内容。你还有其他一些不必要的选择。我会把它修剪成其他选项要么覆盖默认的Compose提供(
container_name:
,build: { dockerfile: }
),要么覆盖Dockerfile中的内容(working_dir:
,command:
),可以安全地删除。fivyi3re2#
您将jar复制到/app/app. jar,但之后在docker-compose.yaml中,您将在/app中安装卷,这将替换所有内容,而app.jar不再存在。