docker - 如何在启动时将文件从主机复制到容器中?
问题描述
我正在尝试使用 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'之后缺少目标文件操作数**
我该如何解决这个问题?谢谢
解决方案
两件事情。
- 你已经用过
CMD
两次了。
CMD
只能使用一次,将其视为您的 docker 映像的用途。每次运行容器时,CMD
如果您想要多个命令,它将始终执行,您应该使用RUN
,然后最后,使用CMD
FROM openjdk:
MAINTAINER MyPerson
WORKDIR /usr/src/
ENTRYPOINT ["cp"]
RUN /usr/src/myapp
RUN ls /usr/src/myapp
- 将东西复制到图像中有一个简单的命令
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
然后查看内部,这通常是查看导致问题的最佳方法。
推荐阅读
- tensorflow - Bert 模型出现 InvalidArgumentError Condition x <= y did not hold element wise
- python - “HTTP 错误 401:未经授权”无法使用 Deta Base
- sql - Oracle SQL 性能
- android - Recyclerview 使用 Firebase 数据库删除项目错误
- mpi - 具有自动消息大小扣除的gatherv
- outlook - Salesforce for Outlook 未在 Salesforce 中显示
- php - PHP 中的时区
- go - 像 echo 一样写入命名管道
- android - 如何获取过去 push() 生成的密钥,以便我可以在 kotlin 中更新或删除它?
- c# - 是 File.WriteAllBytes(String, Byte[]) 方法可以用来保存图片