docker 在没有主机卷的情况下运行本地脚本

Tom*_*Tom 5 database shell docker docker-compose

目标是在数据库容器运行后,使用curl 将下载的数据添加到多容器 Web 应用程序的数据库服务器容器中。只要我使用主机卷,我就可以从 docker-compose.yml 或独立于 Web 应用程序的 docker run 执行此操作。

在不使用主机卷或特定于 Web 应用程序的 Dockerfile 的情况下如何做到这一点?

带有主机卷的 Docker Compose 示例:

dbinit:
build: ./webtools_config/initdb
command: bash -c "/tmp/webtools_config/dbinit.sh"
volumes:
 - ./webtools_config:/tmp/webtools_config
links:
 - db1
 - db2
Run Code Online (Sandbox Code Playgroud)

docker 运行的示例,我想传递docker 客户端本地的脚本文件,例如 ./dbinit.sh:

docker run -a stdin -a stdout -i -t \
--link dir_db1_1:db1 \
--link dir_db2_1:db2 \
initdb /bin/sh -c "./dbinit.sh"
Run Code Online (Sandbox Code Playgroud)

Tom*_*Tom 2

我找到的解决方案是:

docker run tomdavidson/initdb bash -c "`cat initdb.sh`"
Run Code Online (Sandbox Code Playgroud)

设置一个等于您的脚本的 ENV VAR 并设置您的 Docker 映像来运行该脚本(当然可以添加/复制并使用主机卷,但这不是这个问题),例如:

docker run -d -e ADD_INIT_SCRIPT="`cat custom-script.sh`" tomdavidson/debian 
Run Code Online (Sandbox Code Playgroud)

tomdavidson/debian 的 CMD 运行一个脚本:

if [ "${ADD_INIT_SCRIPT}" != "**None**" ]; then
  echo "Executing ADD_INIT_SCRIPT ..."
  bash -c "${ADD_INIT_SCRIPT}"
fi
Run Code Online (Sandbox Code Playgroud)

https://registry.hub.docker.com/u/tomdavidson/debian/