Docker Run sed 不起作用



我正在接近Docker。我创建了一个图像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以查看刚关闭的容器的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 run some/new-image以获取预期的输出。

结论 - 您可能想在原始图像dockerfile中运行sed命令。

最新更新