如何使用docker run在docker容器中运行命令,其中bash变量在容器中进行计算?
例如:
$ SOMEONE=host
$ docker run --env SOMEONE=busybox busybox echo "Hello $SOMEONE"
Hello host如何使它输出Hello busybox
发布于 2018-02-15 16:45:25
echo本身没有任何这样的功能!),我们需要显式地调用sh -c;否则,Docker将直接在容器中调用execlp("echo", "echo", "$SOMEONE", NUL),而容器实际上不会进行任何替换。因此:
docker run --env SOMEONE=busybox busybox sh -c 'echo "Hello $SOMEONE"'发布于 2022-03-30 15:18:01
使用docker run,其中bash变量在其中计算。
下面是我的想法--我在主机上编写了一个脚本,它声明了一个函数,其中包含要在容器中执行的所有命令。通过这种方式,您可以像平时一样更容易地编辑脚本,避免使用特殊的引号位置和转义。此外,我们还可以调试命令,并查看bash在容器中实际做了什么。
下面是一个在Server上运行命令的示例,该命令运行在docker容器中。
-- (host) $ ./create-db.sh
#!/bin/bash
function main_inside_docker {
DBNAME=${1:-testdb}
echo "creating database $DBNAME"
PATH=$MSSQL_PATH:$PATH
SQL="
create database $DBNAME;
select database_id, name, create_date from sys.databases;
"
sqlcmd -U SA -P $SA_PASSWORD -Q "$SQL"
}
CMD="$(declare -f main_inside_docker); main_inside_docker $@"
docker exec -it mssql bash -c "$CMD"本质上,这会将函数定义复制到容器内的bash,然后使用主机调用提供的所有参数运行函数定义。函数中的所有变量都在docker容器中展开。
要调试函数,请将"-x“设置为$CMD中的第一个命令
CMD="set -x; $(declare -f ...)"以这种方式运行它时,它将很好地从容器内部打印bash跟踪:
(host) $ ./create-db.sh foodb
+ main_inside_docker
+ DBNAME=foodb
+ echo 'creating database foodb'
creating database testdb
...https://stackoverflow.com/questions/48812216
复制相似问题