Flask App 在本地运行但在 DigitalOcean 上出错
Flask App runs locally but errors out on DigitalOcean
以下是我的docker-compose.yml文件。它与我的 docker-compose.yml 文件有关。我认为。就像我说的,该应用程序是在本地构建的,但是当我在我的 DigitalOcean Droplet 中 运行 "docker-compose up -d" 时,我收到了这个错误。
ERROR: Couldn't find env file: /root/.env
以下是我的docker-compose.yml文件。
version: '2'
services:
postgres:
image: 'postgres:9.5'
container_name: postgress
env_file:
- '.env'
volumes:
- 'postgres:/var/lib/postgresql/data'
ports:
- '5432:5432'
networks:
- db_nw
redis:
image: 'redis:3.0-alpine'
container_name: redis
command: redis-server --requirepass pass123456word
volumes:
- 'redis:/var/lib/redis/data'
ports:
- '6379:6379'
website:
restart: always
build: .
container_name: website
command: >
gunicorn -c "python:config.gunicorn" --reload "app.app:create_app()"
env_file:
- '.env'
volumes:
- '.:/app'
ports:
- 8000:8000
expose:
- 8000
networks:
- db_nw
- web_nw
depends_on:
- postgres
links:
- celery
- redis
- postgres
celery:
build: .
container_name: celery
command: celery worker -B -l info -A app.blueprints.contact.tasks
env_file:
- '.env'
volumes:
- '.:/app'
nginx:
restart: always
build: ./nginx
image: 'nginx:1.13'
container_name: nginx
volumes:
- /www/static
- .:/app
ports:
- 80:80
networks:
- web_nw
links:
- website
depends_on:
- website
networks:
db_nw:
driver: bridge
web_nw:
driver: bridge
volumes:
postgres:
redis:
我的docker文件
FROM python:3.7.5-slim-buster
RUN apt-get update \
&& apt-get install -qq -y \
build-essential libpq-dev --no-install-recommends
ENV INSTALL_PATH /app
RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH
COPY requirements.txt requirements.txt
RUN pip install --upgrade pip -r requirements.txt
COPY . .
RUN pip install --editable .
CMD gunicorn -c "python:config.gunicorn" "app.app:create_app()"
我的 docker-compose.yml 文件中的卷有问题吗?还是我在我的 Dockerfile 中使用 ENV 做了一些奇怪的事情,将其硬编码到本地机器而不是 DigitalOcean 上的 "root" 目录?F
我是托管 docker 图片的新手,所以这是我第一次尝试这样的操作。谢谢!
当您访问 Droplet 时,您通常 运行 为 root
。
您似乎已将 docker-compose.yml
正确复制到 Droplet,但尚未将它所依赖的 .env
文件复制到 Droplet 的 /root/.env
。
如果您将 .env
文件复制到 Droplet 上的 /root/.env
,它应该可以工作。
以下是我的docker-compose.yml文件。它与我的 docker-compose.yml 文件有关。我认为。就像我说的,该应用程序是在本地构建的,但是当我在我的 DigitalOcean Droplet 中 运行 "docker-compose up -d" 时,我收到了这个错误。
ERROR: Couldn't find env file: /root/.env
以下是我的docker-compose.yml文件。
version: '2'
services:
postgres:
image: 'postgres:9.5'
container_name: postgress
env_file:
- '.env'
volumes:
- 'postgres:/var/lib/postgresql/data'
ports:
- '5432:5432'
networks:
- db_nw
redis:
image: 'redis:3.0-alpine'
container_name: redis
command: redis-server --requirepass pass123456word
volumes:
- 'redis:/var/lib/redis/data'
ports:
- '6379:6379'
website:
restart: always
build: .
container_name: website
command: >
gunicorn -c "python:config.gunicorn" --reload "app.app:create_app()"
env_file:
- '.env'
volumes:
- '.:/app'
ports:
- 8000:8000
expose:
- 8000
networks:
- db_nw
- web_nw
depends_on:
- postgres
links:
- celery
- redis
- postgres
celery:
build: .
container_name: celery
command: celery worker -B -l info -A app.blueprints.contact.tasks
env_file:
- '.env'
volumes:
- '.:/app'
nginx:
restart: always
build: ./nginx
image: 'nginx:1.13'
container_name: nginx
volumes:
- /www/static
- .:/app
ports:
- 80:80
networks:
- web_nw
links:
- website
depends_on:
- website
networks:
db_nw:
driver: bridge
web_nw:
driver: bridge
volumes:
postgres:
redis:
我的docker文件
FROM python:3.7.5-slim-buster
RUN apt-get update \
&& apt-get install -qq -y \
build-essential libpq-dev --no-install-recommends
ENV INSTALL_PATH /app
RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH
COPY requirements.txt requirements.txt
RUN pip install --upgrade pip -r requirements.txt
COPY . .
RUN pip install --editable .
CMD gunicorn -c "python:config.gunicorn" "app.app:create_app()"
我的 docker-compose.yml 文件中的卷有问题吗?还是我在我的 Dockerfile 中使用 ENV 做了一些奇怪的事情,将其硬编码到本地机器而不是 DigitalOcean 上的 "root" 目录?F
我是托管 docker 图片的新手,所以这是我第一次尝试这样的操作。谢谢!
当您访问 Droplet 时,您通常 运行 为 root
。
您似乎已将 docker-compose.yml
正确复制到 Droplet,但尚未将它所依赖的 .env
文件复制到 Droplet 的 /root/.env
。
如果您将 .env
文件复制到 Droplet 上的 /root/.env
,它应该可以工作。