在Docker中将卷装入容器后容器未启动

时间:2020-11-05 14:49:16

标签: docker docker-compose

我有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部分,则它将运行。

1 个答案:

答案 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