Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Docker-在Windows主机上运行bash脚本_Django_Bash_Perl_Docker - Fatal编程技术网

Django Docker-在Windows主机上运行bash脚本

Django Docker-在Windows主机上运行bash脚本,django,bash,perl,docker,Django,Bash,Perl,Docker,我用Docker设置了一个django项目,它有两个容器,一个用于django服务器,一个用于postgres服务器。我还希望能够为这个项目运行bash脚本和perl脚本,例如,我需要使用bash脚本从实时站点自动下载和恢复数据库转储。我是否为每个bash脚本设置新的Docker映像?或者我需要设置一个Ubuntu容器并通过它运行bash脚本 以下是Dockerfile: FROM python:3.5 ENV PYTHONBUFFERED 1 ENV APPLICATION_ROOT /ap

我用Docker设置了一个django项目,它有两个容器,一个用于
django
服务器,一个用于
postgres
服务器。我还希望能够为这个项目运行bash脚本和perl脚本,例如,我需要使用bash脚本从实时站点自动下载和恢复数据库转储。我是否为每个bash脚本设置新的Docker映像?或者我需要设置一个Ubuntu容器并通过它运行bash脚本

以下是Dockerfile:

FROM python:3.5

ENV PYTHONBUFFERED 1
ENV APPLICATION_ROOT /app/
ENV APP_ENVIRONMENT L
COMPOSE_CONVERT_WINDOWS_PATHS=1

RUN mkdir -p $APPLICATION_ROOT
WORKDIR $APPLICATION_ROOT
ADD requirements.txt $APPLICATION_ROOT
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . $APPLICATION_ROOT
和docker compose文件:

web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
        - .:/app
    ports:
        - "8998:8998"
    links:
        - db

db:
    image: postgres:9.4
    environment:
        APP_ENVIRONMENT: L
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: root
        POSTGRES_DB: mydb

我是Docker的新手,所以还不知道做事情的最佳方法。我将把bash脚本和新docker文件放在哪里,如何将其链接到此项目,以便在项目运行时执行脚本?有几种方法可以做到这一点,我可以创建一个bash容器,并使用它来运行脚本。或者我可以在bash映像上创建一个容器,其中包含我需要的所有脚本,或者我可以为每个脚本创建一个容器。我可能需要在这些bash脚本旁边运行
perl
awk
expect
,因此,在这种情况下,我是否只需将每个脚本的图像导入容器

有些概念你搞错了:

  • 每个容器仅加载一个图像。容器运行该映像的一个实例。将容器视为包含的虚拟机,将映像视为操作系统
  • 您不希望每个脚本都有一个容器。容器是包含的,如果在其中一个容器中运行脚本,则不会影响另一个容器。当然,你可以有很多ubuntu图片,但它对你想做的事情没有意义。将容器视为必须执行任务(运行数据库、托管网页等)的服务;它必须有内部的一切需要工作
  • 如果需要在容器中运行脚本,必须首先使用Dockerfile中的
    ADD
    COPY
    将脚本设置到容器中,然后使用
    CMD
    执行脚本。这将在容器内执行它,因此将影响其状态。有关如何使用这些命令的详细信息,请查看

  • 另外,由于您似乎在理解整个容器体系结构时遇到了一些困难,我建议您看看入门文档。