首页 > 解决方案 > 如何在启动时将文件从主机复制到容器中?

问题描述

我正在尝试使用 dockerfile 构建 docker 映像,我的目的是在运行“docker run”命令时将文件复制到特定文件夹中!

这是我的 dockerfile 代码:

    FROM openjdk:7

    MAINTAINER MyPerson

    WORKDIR /usr/src/myapp

    ENTRYPOINT ["cp"]

    CMD ["/usr/src/myapp"]

    CMD ls /usr/src/myapp

在没有任何错误的情况下构建我的图像后(使用 docker build 命令),我尝试运行我的新图像:

    docker run myjavaimage MainClass.java

我得到了这个错误:** cp:'MainClass.java'之后缺少目标文件操作数**

我该如何解决这个问题?谢谢

标签: dockerdockerfiledocker-entrypoint

解决方案


两件事情。

  1. 你已经用过CMD两次了。

CMD只能使用一次,将其视为您的 docker 映像的用途。每次运行容器时,CMD如果您想要多个命令,它将始终执行,您应该使用RUN,然后最后,使用CMD

FROM openjdk:
MAINTAINER MyPerson
WORKDIR /usr/src/
ENTRYPOINT ["cp"]
RUN /usr/src/myapp
RUN ls /usr/src/myapp
  1. 将东西复制到图像中有一个简单的命令COPY,其语法是COPY <from-here> <to-here>

好像你想跑步myjavaimage,所以你要做的是

COPY /path/to/myjavaimage /myjavaimage
CMD myjavaimage MainClass.java

在您看到箭头的地方,我刚刚编写了虚拟代码。用正确的代码替换它。

此外,您的 Dockerfile 创建不正确。

ENTRYPOINT -> 不确定你为什么要做“cp”,但它是一个实际的入口点。可以指向项目的根目录或将要运行的应用程序。不明白您为什么要这样做,ls /usr/src/myapp但如果您确实想这样做,请使用RUN而不是CMD

最后,调试 docker 容器的最佳方式是交互模式。这意味着 ssh 进入你的容器,环顾四周,运行代码,看看有什么问题。

运行这个:docker run -it <image-name> /bin/bash然后查看内部,这通常是查看导致问题的最佳方法。


推荐阅读