【问题标题】:Executing shell script using docker file使用 docker 文件执行 shell 脚本
【发布时间】:2017-07-10 10:56:35
【问题描述】:

我有一些 tar 文件,我想将它们移动到 docker 映像并在那里提取它们,然后运行 ​​python web 应用程序脚本。我有提取这些文件的 sh 脚本。

如果我使用 RUN 命令运行脚本,那么它们会被提取,但它们不会出现在最终容器中。

我也使用了入口点,但它执行然后关闭不执行“主 python 脚本”的容器。

有没有办法执行这个安装脚本,然后继续运行主脚本而不关闭?

Dockerfile

# Use an official Python runtime as a parent image
FROM python:2.7-slim

RUN apt-get update \
    && apt-get install -y curl \
    && curl -sL https://deb.nodesource.com/setup_4.x | bash \
    && apt-get install -y nodejs \
    && apt-get install -y git \
    && npm install -g bower \
    && npm install -g gulp@^3.9.1

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

RUN pip install -r requirements.txt \
    && npm install \
    && bower install --allow-root \
    && gulp default

# Define environment variable
ENV PATH "$PATH:/app/tree-tagger/cmd/"
ENV PATH "$PATH:/app/tree-tagger/bin/"
ENV TREETAGGER "/app/tree-tagger/cmd/"
ENV TREETAGGER_HOME "/app/tree-tagger/cmd/"

CMD python app.py

ENTRYPOINT sh tree-tagger/install-tagger.sh

这是 docker-compose 脚本

web:
  build: .
  ports:
    - "8080:8080"
  volumes:
    - .:/app
  links:
    - db
db:
  image: mongo:3.0.2

【问题讨论】:

  • 当您有一个应该启动并继续运行的入口点,但您的 docker 容器立即退出时,则表示运行有问题。要调试它,您可以使用手动覆盖的 --entrypoint=/bin/bash 运行容器并尝试手动运行命令以查看发生了什么。

标签: python bash shell docker docker-compose


【解决方案1】:

您可以为此使用 RUN。 RUN 在容器端运行,因此由它创建的任何新内容 - 也将包含在容器中。

您的问题很可能来自您的 docker-compose 文件正在安装您之前写入的卷。 基本上,您要做的是: 1.在容器创建过程中,将当前目录复制到/app并对其进行处理 2. 创建容器后 - 再次将当前目录挂载到 /app 时运行它。

因此,您最终会覆盖 /app/ 中新创建的任何内容。如果您跳过 docker-compose 中的卷部分,它将按预期工作。但是,如果您更喜欢将当前应用程序代码挂载到 /app (因此您不必在每次代码更改时在开发过程中重建映像),有一种方法。只需将您的 docker-compose 更改为:

web:
  build: .
   ports:
    - "8080:8080"
  volumes:
    - .:/app
    - /app/tree-tagger/
  links:
    - db
db:
  image: mongo:3.0.2

现在您可以将您的 dockerfile 更改为您之前的文件(使用 RUN 而不是 ENTRYPOINT),并且 /app/tree-tagger/ 这次不会被替换。所以:

...  
RUN sh tree-tagger/install-tagger.sh
CMD python app.py

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多