docker run sed不';行不通

docker run sed不';行不通,sed,docker,Sed,Docker,我快到了。我创建了一个debootstraping Debian Jessie的图像,我想将contrib部分添加到APT源文件中 /etc/apt/sources。列表内容包括: $ docker run some/image cat /etc/apt/sources.list deb http://debian.fastweb.it/debian jessie main deb http://debian.fastweb.it/debian jessie-updates main deb h

我快到了。我创建了一个debootstraping Debian Jessie的图像,我想将
contrib
部分添加到APT源文件中

/etc/apt/sources。列表内容包括:

$ docker run some/image cat /etc/apt/sources.list
deb http://debian.fastweb.it/debian jessie main
deb http://debian.fastweb.it/debian jessie-updates main
deb http://security.debian.org/ jessie/updates main
我希望他们:

deb http://debian.fastweb.it/debian jessie main contrib
deb http://debian.fastweb.it/debian jessie-updates main contrib
deb http://security.debian.org/ jessie/updates main contrib
所以我运行了这个命令:

docker run some/image sed -i 's/main/main contrib/g' /etc/apt/sources.list
无误退出;但它不会更新
/etc/apt/sources。列出
内容:

$ docker run some/image cat /etc/apt/sources.list
deb http://debian.fastweb.it/debian jessie main
deb http://debian.fastweb.it/debian jessie-updates main
deb http://security.debian.org/ jessie/updates main

您没有更改图像。您根据图像启动了一个容器。然后运行sed命令并更改文件内容。检查
docker ps-a
,查看刚刚关闭的容器的id。如果使用
docker cp
提取文件,您应该会看到它已按预期更改(假设sed命令正常)

您还可以创建Dockerfile

FROM some/image
RUN sed -i 's/main/main contrib/g' /etc/apt/sources.list
# this command is just temporary, you probably are going to do something else
CMD cat /etc/apt/sources.list
然后运行新图像
docker运行一些/new image
,以获得预期的输出


结论-您可能希望在原始images Dockerfile中运行sed命令

如果我检查运行命令的容器的
sources.list
的内容,您是对的,它们会被更新。我仍然必须理解图像和容器之间的区别;你能解释一下如何修改图像吗?你能建议一个工作流程来做这类事情吗?(链接到相关资源会很好:))没问题,如果没有,我会去;)两个正确的流是:1)docker运行-->docker提交-->docker运行;2) 您可以从Dockerfile构建映像并从映像运行容器。请查看Docker官方文档中的术语表: