docker run sed 不起作用

mde*_*tis 6 sed docker

我正在接近Docker。我创建了一个图像 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
Run Code Online (Sandbox Code Playgroud)

我希望他们是:

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
Run Code Online (Sandbox Code Playgroud)

所以我运行了这个命令:

docker run some/image sed -i 's/main/main contrib/g' /etc/apt/sources.list
Run Code Online (Sandbox Code Playgroud)

退出没有错误; 但它不会更新/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
Run Code Online (Sandbox Code Playgroud)

qkr*_*ger 5

你没有改变图像。您基于图像启动了一个容器。然后运行 ​​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
Run Code Online (Sandbox Code Playgroud)

并运行新图像docker run some/new-image以获得预期的输出。

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