我可以从浏览器运行 docker 容器吗?

时间:2021-05-26 09:56:19

标签: docker browser docker-compose

我想没有人知道是否可以从网络应用调用 docker rundocker 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

1 个答案:

答案 0 :(得分:1)

有 Docker API,您可以启动容器,

在 Docker 文档中, https://docs.docker.com/engine/api/

使用 Docker API 启动容器 https://docs.docker.com/engine/api/v1.41/#operation/ContainerStart