Docker文件COPY然后是WORKDIR,但是该文件位于其他目录中

时间:2019-04-30 16:58:09

标签: java python bash docker

我有两个docker映像: imageA imageB

ImageA Dockerfile

FROM openjdk:11-jre-slim
COPY ./target/java-app.jar /java-application/

ImageB Dockerfile

FROM imageA

# Install Python.
RUN \
  apt-get update && \
  apt-get install -y python python-dev python-pip python-virtualenv && \
  rm -rf /var/lib/apt/lists/*

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

ENTRYPOINT ./startPythonServiceAndJavaApp.sh

startPythonServiceAndJavaApp.sh -是启动Java应用程序和python应用程序的脚本。

java -XX:+UseContainerSupport $JAVA_OPTIONS -jar ./java-application/java-app.jar & python app.py;

然后我构建 imageA -docker build -t imageA .。它构建成功。

然后我构建 imageB 并启动容器。 python应用程序成功启动,但出现错误

Error: Unable to access jarfile ./java-application/java-app.jar

当我SSH到正在运行的容器(注意,它正在运行)时,我进入app目录。我运行了ls,看到了以下文件:

C:\Users\user>docker exec -it 12345  bash
root@12345:/app# ls
Dockerfile  app.py  deploy.sh  requirements.txt  java-app.jar  startPythonServiceAndJavaApp.sh

我的问题是,为什么 java-app.jar 最终出现在 app 目录中?在 imageA Dockerfile中,我告诉它位于java-application目录中:

COPY ./target/java-app.jar /java-application/

1 个答案:

答案 0 :(得分:0)

我的问题可以COPYWORKDIR一起改写。作为快速解决方案,我将jar文件放入docker上下文的根目录。然后,我从该上下文中启动了这两个应用程序。

以下是更改:

ImageA Dockerfile-只需复制到容器的根目录即可。     复制./target/java-app.jar /

startPythonServiceAndJavaApp.sh java -XX:+ UseContainerSupport $ JAVA_OPTIONS -jar ./java-app.jar和python app.py;

两个应用程序现在都在单个容器中运行。希望这对其他人有帮助。请纠正我的错误或分享您的想法。