【发布时间】:2021-05-07 14:57:28
【问题描述】:
我有一个容器 Postgres,它在其 Dockerfile 中启动一个 docker-entrypoint.sh,在该 shell 文件中有一个我想使用此命令删除的命令:
sed -i 's/exec "$@"//g' docker-entrypoint.sh
目标是能够使用修改后的 docker-entrypoint.sh 运行容器(没有 exec "@")
如何使用之前启动的命令运行容器? 我使用了另一种方法,我用另一个没有'exec“@”'的shell文件覆盖了docker-entrypoint.sh,然后我使用这个命令安装它来运行我的容器:
docker run -v $(pwd):/docker-entrypoint-initdb.d -e POSTGRES_PASSWORD=password \
--entrypoint="docker-entrypoint-initdb.d/docker-entrypoint-custom.sh" postgres postgres
我确信有更好的方法可以让我在 bash 中运行命令,然后运行我自己的命令
我正在尝试这样的事情,但它不起作用:
docker run --rm -v $PWD:/docker-entrypoint-initdb.d -e POSTGRES_PASSWORD=password --entrypoint=/bin/bash postgres sed -i 's/exec "$@"//g' docker-entrypoint.sh && postgres docker-entrypoint.sh
【问题讨论】:
-
您当前使用的方法是 iMO 选项中最好的。
-
您在
sed命令中使用单引号,并在其中使用$@变量。请注意,单引号内的任何变量都不会被插值。请使用双引号。 -
@P....
exec "$@"可能是 OP 想要替换的,即原样,没有任何替换。
标签: linux bash docker shell containers