我有4个要通过docker compose运行的服务:
version: "3"
services:
billingmock:
build:
context: ./mock/soap/billing
dockerfile: ./Dockerfile
ports:
- 8096:8096
salcusmock:
build:
context: ./mock/soap/salcus
dockerfile: ./Dockerfile
ports:
- 8088:8088
ngocsrestmock:
build:
context: ./mock/rest/ngocs-rest
dockerfile: ./Dockerfile
volumes:
- /test/mock-data/Ngocs-Rest-Mock:/usr/src/ngocs-rest-mock/
ports:
- 8091:8091
kafka:
image: <some-repo>.com/mce/kafka_local_r20-11
ports:
- 9092:9092
- 8080:8080
- 8081:8081
- 8082:8082
但是ngocs容器未运行,当我查看该容器的日志时,所有其他容器s都在运行:Exited (1) 36 seconds ago
Error: Unable to access jarfile mocks-mock-ngocs-rest-executable-1.0.0-SNAPSHOT.jar
该服务的dockerfile是:
FROM openjdk:8
COPY /executable/target/mocks-mock-ngocs-rest-executable-1.0.0-SNAPSHOT.jar /usr/src/ngocs-rest-mock/
WORKDIR /usr/src/ngocs-rest-mock/
ENTRYPOINT ["java","-jar","mocks-mock-ngocs-rest-executable-1.0.0-SNAPSHOT.jar"]
我必须手动启动容器,然后容器运行,但未安装卷。似乎是什么问题???另外,如果我在docker compose中删除了volume部分,则它将运行。
答案 0 :(得分:1)
如果您有volumes:
将主机目录绑定到容器目录,那么在容器启动时,该主机目录的内容将始终完全隐藏基础映像中的所有内容。就您而言,您是在包含jar文件的目录上安装目录,因此实际的应用程序将被隐藏。
您应该重组应用程序,以使数据与应用程序代码分开。使用简单的顶级目录(例如/app
和/data
)已经足够普遍了,或者可以将数据目录设置为应用程序目录的子目录。
完成此操作后,可以将volumes:
挂载更改为其他目录:
# for example, a "data" subdirectory of the application directory
volumes:
- /test/mock-data/Ngocs-Rest-Mock:/usr/src/ngocs-rest-mock/data