我想没有人知道是否可以从网络应用调用 docker run
或 docker compose up
命令?
我有以下场景,其中我有一个使用 openlayers 作为地图的 React 应用程序。我有它,所以当用户失去互联网连接时,它会回退到向在 docker 本地运行的 map server 发出请求。问题是用户需要通过命令行手动启动服务器。为了让用户更轻松,我添加了以下 bash 脚本和 docker compose 文件以使用单个命令启动服务器,但想知道是否可以将该功能合并到 Web 应用程序中并让用户启动地图服务器点击按钮?
仅供参考,这些是我的 bash 和 compose 文件。
#!/bin/sh
dockerDown=`docker info | grep -qi "ERROR" && echo "stopped"`
if [ $dockerDown ]
then
echo "\n ********* Please start docker before running this script ********* \n"
exit 1
fi
skipInstall="no"
read -p "Have you imported the maps already and just want to run the app (y/n)?" choice
case "$choice" in
y|Y ) skipInstall="yes";;
n|N ) skipInstall="no";;
* ) skipInstall="no";;
esac
pbfUrl='https://download.geofabrik.de/asia/malaysia-singapore-brunei-latest.osm.pbf'
#polyUrl='https://download.geofabrik.de/asia/malaysia-singapore-brunei.poly'
#-e DOWNLOAD_POLY=$polyUrl \
docker volume create openstreetmap-data
docker volume create openstreetmap-rendered-tiles
if [ $skipInstall = "no" ]
then
echo "\n ***** IF THIS IS THE FIRST TIME, YOU MIGHT WANT TO GO GET A CUP OF COFFEE WHILE YOU WAIT ***** \n"
docker run \
-e DOWNLOAD_PBF=$pbfUrl \
-v openstreetmap-data:/var/lib/postgresql/12/main \
-v openstreetmap-rendered-tiles:/var/lib/mod_tile \
overv/openstreetmap-tile-server \
import
echo "Finished Postgres container!"
fi
echo "\n *** BOOTING UP SERVER CONTAINER *** \n"
docker compose up
我的 docker 撰写文件
version: '3'
services:
map:
image: overv/openstreetmap-tile-server
volumes:
- openstreetmap-data:/var/lib/postgresql/12/main
- openstreetmap-rendered-tiles:/var/lib/mod_tile
environment:
- THREADS=24
- OSM2PGSQL_EXTRA_ARGS=-C 4096
- AUTOVACUUM=off
ports:
- "8080:80"
command: "run"
volumes:
openstreetmap-data:
external: true
openstreetmap-rendered-tiles:
external: true
答案 0 :(得分:1)
有 Docker API,您可以启动容器,
在 Docker 文档中, https://docs.docker.com/engine/api/
使用 Docker API 启动容器 https://docs.docker.com/engine/api/v1.41/#operation/ContainerStart