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

时间:2015-06-17 03:56:30

标签: database shell docker docker-compose

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

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

Docker使用主机卷撰写示例:

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

docker run的示例,我想传递一个脚本文件本地到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"

2 个答案:

答案 0 :(得分:1)

我找到的解决方案是:

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/

答案 1 :(得分:0)

如果我理解正确,您可以消除通过构建图像链接主机卷。

你的Dockerfile:

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

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