当前位置: 首页 > 面试题库 >

Docker提交创建的图像和ENTRYPOINT

薄哲
2023-03-14
问题内容

docker run通过进行更改时,如何确保在Dockerfile中指定的原始CMD仍设置为在其上运行docker commit

这是事件的顺序,以使其更加清楚:

  1. 使用Dockerfile创建映像
  2. -ti --entrypoint /bin/bash之后从image运行容器以进行一些更改
  3. 在容器内进行更改并运行docker commit以创建带有新标签的新图像
  4. 运行新映像时,不再运行原始Dockerfile中的原始CMD条目

所以我问 如何在已提交的映像上再次从Dockerfile重置CMD?


问题答案:

您将创建一个Dockerfile来设置CMDor ENTRYPOINT。只需将Dockerfile基于由返回的映像ID docker commit。例如,鉴于此:

$ docker commit $(docker ps -lq)
69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b

我可以创建一个如下所示的Dockerfile:

FROM 69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b
CMD ["/bin/bash"]

然后使用它来构建新图像:

$ docker build .
Step 0 : FROM 69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b
 ---> 69e9c0882550
Step 1 : CMD /bin/bash
 ---> Running in f886c783551d
 ---> 13a0f8ea5cc5
Removing intermediate container f886c783551d
Successfully built 13a0f8ea5cc5

也就是说,最好的做法可能是 不对 容器进行更改,然后使用Docker
commit。如果仅仅依靠Dockerfile首先实现必要的更改,那么最终将产生更多可审核的更改。



 类似资料:
  • 我已经使用下面的命令从一个Docker文件构建了一个Docker映像。 当我试图用相同的命令重建它时,它使用的构建缓存如下所示: 缓存显示已安装aerospike。但是,我在从这个映像生成的容器中找不到它,所以我想在不使用缓存的情况下重建这个映像。如何强制Docker在没有缓存的情况下重建一个干净的映像?

  • 停留在基础上。我在设置图像路径时遇到了一些语法问题。当我尝试创建一个图像并给它图像路径时,它总是抛出一些关于路径的一些异常。我已经评论了一些我已经尝试过的路径组合。你能告诉我我做错了什么吗?谢谢你。 封装JOPOFX; 这是打印出来的内容:错误while creating image java.lang.IllegalArgumentException:无效URL:在javafx.scene.im

  • 然后尝试了这个解决方案,我尝试了,但没有返回任何内容,还尝试了,显示0 GB。 我还计划在docker内安装其他程序到操作系统,因此希望从现有的子映像中产生新的子映像。我到处搜索,没有一个很好的解决方案删除一个父图像在docker和原因,我阅读是因为一些父层被使用的子图像。在docker中生成一个新的子映像后,是否没有办法删除父映像?

  • 我正试图用集装箱装一个样品。docker内的js应用程序。 我的docker文件如下,我在项目的工作目录中 我可以成功创建图像 无论如何,当我想运行应用程序时,它并不是一个正在运行的docker镜像 我不知道我哪里做错了? [PS:]根据评论,我已将CMD更改为 但是我不能构建镜像

  • 我正在使用jhipster kafka实现,它使用confluentinc/cp-kafka: 5.4.0映像,当我尝试使用环境变量“KAFKA_CREATE_TOPICS:”创建Kafka主题时,我没有收到任何错误,但主题没有被创建,我在想三种不同的方法来解决这个问题, 通过 docker 撰写文件上的命令创建主题。 将Kafka和动物园管理员的形象更改为另一个像沃尔斯特迈斯特形象的形象。 在

  • 让我们以whalesay图片为例<代码>docker history显示以下内容: 我想提取显示为的层。有这样做的工具/方法吗?