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)
我找到的解决方案是:
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/
| 归档时间: |
|
| 查看次数: |
6349 次 |
| 最近记录: |