docker运行sed不起作用

我正在接近Docker 。 我创build了一个debootstraping Debian Jessie的图像,我想将contrib部分添加到APT源文件中。

/etc/apt/sources.list内容是:

 $ 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.list内容:

 $ 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以查看刚刚closures的容器的ID。 如果你使用docker cp来提取你的文件,你应该看到它已经按预期改变了(假设你的sed命令正常)。

你也可以创build一个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 run some/new-image来获得预期的输出。

结论 – 你可能想要在原始图像Dockerfile中运行你的sed命令。