【问题标题】:Docker compose run shell command after startupDocker compose 启动后运行 shell 命令
【发布时间】:2020-02-09 09:57:07
【问题描述】:

对于一个 hello world 示例,我想启动 2 个容器:

  1. Flask 服务器(稍后通过 http 访问 Graphdb 服务器)
  2. Graphdb 服务器

对于我的 Flask 服务器,我编写了以下 Dockerfile:

FROM python:3.7.1

LABEL Author="Test"
LABEL version="1.0.0"

ENV PYTHONDONTWRITEBYTECODE 1
ENV FLASK_APP "app.py"
ENV FLASK_ENV "development"
ENV FLASK_DEBUG True

RUN mkdir /app
WORKDIR /app

RUN pip install flask

ADD . /app

EXPOSE 5000

CMD flask run --host=0.0.0.0

我的 docker-compose.yml 文件看起来像:

version: '3'
services:
  db:
    image: ontotext/graphdb:9.1.1-se
    ports:
    - "7200:7200"
  server:
    build: .
    ports:
    - "5000:5000"
    depends_on:
    - db

现在我想执行一个shell命令

loadrdf -c [.ttl 文件的路径]

以 graphdb 实例为目标以从文件加载我的 RDF 数据,该文件位于:../rdf/rdf.ttl(来自 Dockerfile 和 docker-compose.yml 的相对路径)。

我的问题是如何从 graphdb 容器中访问 rdf.ttl 文件以及如何/在哪里执行这个 shell 命令?

【问题讨论】:

    标签: docker docker-compose dockerfile docker-machine graphdb


    【解决方案1】:

    您需要在 docker-compose.yml 中挂载一个卷,其中包含您的 RDF 文件:

      server:
        ...
        volumes:
        - ../rdf:/rdf
    

    然后在您的服务运行后,您可以在主机上运行此命令:

    docker-compose exec server loadrdf /rdf/rdf.ttl
    

    这将在容器内运行您的命令并在挂载点找到您的文件。

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多