我试图通过在docker容器中使用docker-compose来运行shell脚本。我正在使用Dockerfile来构建容器环境并安装所有依赖项。然后我将所有项目文件复制到容器中。就我所知,这工作得很好。(我对docker、docker-compose还是个新手)
我的停靠文件:
FROM python:3.6-alpine3.7
RUN apk add --no-cache --update \
python3 python3-dev gcc \
gfortran musl-dev \
libffi-dev openssl-dev
RUN pip install --upgrade pip
ENV PYTHONUNBUFFERED 1
ENV APP /app
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir $APP
WORKDIR $APP
ADD requirements.txt .
RUN pip install -r requirements.txt
COPY . .
我目前正在尝试的是:
停靠器合成文件:
version: "2"
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "8000:8000"
- "443:443"
volumes:
- ./:/app
- ./config/nginx:/etc/nginx/conf.d
- ./config/nginx/ssl/certs:/etc/ssl/certs
- ./config/nginx/ssl/private:/etc/ssl/private
depends_on:
- api
api:
build: .
container_name: app
command: /bin/sh -c "entrypoint.sh"
expose:
- "5000"
这导致容器无法启动,从日志中我得到以下信息:
/bin/sh: 1: entrypoint.sh: not found
有关更多参考和信息,请参见我的entrypoint.sh脚本:
python manage.py db init
python manage.py db migrate --message 'initial database migration'
python manage.py db upgrade
gunicorn -w 1 -b 0.0.0.0:5000 manage:app
基本上,我知道我可以在dockerfile的命令行中只使用上面的gunicorn行来运行容器。但是,我在应用程序容器中使用sqlite db,并且真的需要运行数据库的db命令来初始化/迁移。
仅供参考,这是一个基本的Flask Python Web应用程序,使用gunicorn使用nginx反向代理。
任何见解都将不胜感激。谢谢。
2条答案
按热度按时间rta7y2nd1#
第一件事,你是复制
entrypoint.sh
到$APP
,你从你的构建参数传递,但你没有提到,第二件事,你需要设置entrypoint.sh
的权限。最好添加这三行,这样你就不需要在docker-compose文件中添加command
。docker compose for API将是
或者你可以用你自己的也会很好的工作
现在你也可以使用docker run命令进行检查。
kmynzznz2#
entrypoint.sh
需要指定其完整路径。从你的问题中并不清楚你到底在哪里安装它;如果它在当前目录中,
./entrypoint.sh
应该可以工作。(如果要运行单个脚本文件,
sh
的-c
选项是多余的。)