我正在尝试通过在 docker 容器内使用 docker-compose 来运行 shell 脚本。我正在使用 Dockerfile 构建容器环境并安装所有依赖项。然后,我将所有项目文件复制到容器中。据我所知,这很有效。 (我对 docker、docker-compose 还很陌生)
我的 Dockerfile:
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 . .
我目前正在尝试的是这样的:
docker-compose 文件:
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 数据库,并且确实需要运行数据库命令来初始化/迁移数据库。
仅供参考,这是一个基本的 Flask python Web 应用程序,带有使用 Gunicorn 的 nginx 反向代理。
任何见解将不胜感激。谢谢。
首先,你正在复制entrypoint.sh
to $APP
您从构建参数中传递了它,但您没有提到这一点,您需要设置权限的第二件事entrypoint.sh
。最好添加这三行,这样您就不需要添加command
在 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 . .
# These line for /entrypoint.sh
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT "/entrypoint.sh"
docker compose for api 将是
api:
build: .
container_name: app
expose:
- "5000"
或者你可以使用你自己的也可以正常工作
version: "2"
services:
api:
build: .
container_name: app
command: /bin/sh -c "entrypoint.sh"
expose:
- "5000"
现在您也可以使用 docker run 命令进行检查。
docker run -it --rm myapp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)