docker工人运行没有主机卷的本地脚本

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

如何在不使用主机卷或Web应用程序特定的Docker文件的情况下执行此操作?

Docker撰写与主机卷的例子:

dbinit: build: ./webtools_config/initdb command: bash -c "/tmp/webtools_config/dbinit.sh" volumes: - ./webtools_config:/tmp/webtools_config links: - db1 - db2 

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" 

我find的解决scheme是:

 docker run tomdavidson/initdb bash -c "`cat initdb.sh`" 

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

 docker run -d -e ADD_INIT_SCRIPT="`cat custom-script.sh`" tomdavidson/debian 

tomdavidson / debian的CMD运行脚本:

 if [ "${ADD_INIT_SCRIPT}" != "**None**" ]; then echo "Executing ADD_INIT_SCRIPT ..." bash -c "${ADD_INIT_SCRIPT}" fi 

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

如果我正确地理解了你,你可以通过用这个脚本构build映像来消除链接主机卷。

你的Dockerfile:

 # Dockerfile ... ADD your-script-on-host.sh /app/your-script-in-container.sh RUN /app/your-script-in-container.sh # Your CMD here 

请注意,只有在构build图像时才能更新和运行此脚本。