【问题标题】:How to modifiy a file inside docker Image如何修改docker Image中的文件
【发布时间】:2020-11-18 07:15:20
【问题描述】:

我从https://github.com/snowflakedb/SnowAlert 拉取了一个 docker 镜像。

但是在拉取镜像之后,我没有看到任何容器在运行。我使用了
docker container ls 命令,它没有返回任何容器。 现在由于一些用例,我想修改这个 docker 镜像中的一个文件。 正确的做法是什么?

谢谢

【问题讨论】:

  • 那个仓库有两个 Dockerfile;您应该能够修改其中一个,然后 docker build 使用您的更改创建一个新图像。对于某些更改(尤其是注入配置文件),可能会有更简单的路径,但通常您根本无法修改构建的图像。

标签: docker docker-compose dockerfile docker-machine


【解决方案1】:

不要将图像与容器混淆:https://phoenixnap.com/kb/docker-image-vs-container

你需要“up”图片来为它创建合适的容器:https://docs.docker.com/get-started/part2/#run-your-image-as-a-container

如果你想检查/编辑任何容器使用命令(就像 ssh 到容器的服务器):

docker exec -it CONTAINER_ID bash

要获取所有 docker 容器并找到它们的 ID,请使用命令:

docker ps -a

【讨论】:

  • docker container ls -a 应该也可以,ls 默认显示当前运行的容器
  • @DDKV587 你是对的,它也必须输出容器,但不要错过我的回答的第一部分:首先你需要“up”图像来创建合适的容器。
  • 请记住,一旦容器退出,您在 docker exec shell 中所做的任何更改都会丢失。
【解决方案2】:

这就是解决我的问题的方法。 从 github 提取存储库后,我运行以下命令

sudo docker images

这将显示现有图像的名称。现在复制您需要在其中进行修改的图像名称。

sudo docker run -it <copied_image_name> bash

这将打开所有文件所在的 bash。在需要的地方进行修改,然后输入exit

从下面的命令复制容器 ID

sudo docker ps -a 

现在我们需要使用以下命令将更改提交到新图像中

sudo docker commit <container_id> <new_image_name>

仅此而已 现在执行sudo docker images 这将显示新创建的图像以及修改后的内容。

谢谢

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2016-12-07
    相关资源
    最近更新 更多