【问题标题】:Docker file COPY then WORKDIR, but the file is in different directoryDocker文件COPY然后WORKDIR,但文件在不同的目录
【发布时间】:2019-09-19 09:23:34
【问题描述】:

我有两个 docker 图像:imageAimageB

ImageADockerfile

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

ImageBDockerfile

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 目录中?在 imageADockerfile 中,我告诉它在java-application 目录中:

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

【问题讨论】:

    标签: java python bash docker


    【解决方案1】:

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

    以下是更改:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多