执行命令到docker容器

时间:2016-08-30 20:27:22

标签: bash docker sed

我正在尝试更改docker容器内的配置文件。

docker exec container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini 

在本地执行此sed命令工作得很好,但是当我尝试在容器中执行此命令时,我收到以下错误消息。

sed: cannot rename tmp/config.ini: Operation not permitted

我需要做的是在将容器部署到我的服务器之前,从'config.ini'替换'URL_BASE ='

我不知道为什么sed命令试图重命名该文件,而不是假设。

有什么想法吗?

我尝试了什么

我尝试使用--privileged标志执行,但没有奏效。我试图用chmod更改文件权限,但出于同样的原因,我不能这样做。

docker exec --privileged container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini 

Result: sed: cannot rename tmp/config.ini: Operation not permitted

CHMOD

docker exec --privileged  container_name chmod 755 tmp/config.ini 

Result: chmod: changing permissions of 'tmp/config.ini': Operation not permitted

我也尝试过在docker之前执行sudo但是也没用。

1 个答案:

答案 0 :(得分:4)

Nehal是绝对正确的,sed可以创建一个本地文件,因此您只需要一种不同的方法,这种方法通常在Linux上使用:heredocs

仅从文档中的第一行开始,这里的文档是一个特殊用途的代码块。它使用一种I / O重定向方式将命令列表提供给交互式程序。

它可以帮助我们使用docker exec,如下所示:

docker exec -i container_name bash <<EOF
sed -ire '/URL_BASE = /c\api.myapiurl' /tmp/config.ini
grep URL_BASE /tmp/config.ini
# any other command you like
EOF

请注意-t,它通常用于运行bash,因为它分配了一个伪TTY,我们并不真正需要它。 另外,为了安全起见,请始终使用/tmp/config.ini等绝对路径。