目标是在数据库容器运行后使用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"
答案 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
答案 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
请注意,只有在构建图像时,您才能更新并运行此脚本。