gpt4 book ai didi

python - 在服务器中对Gunicorn + Nginx + Django dockerized应用程序进行新更改

转载 作者:行者123 更新时间:2023-12-02 19:14:28 29 4
gpt4 key购买 nike

Docker新手在这里。
我已在应用程序内部进行了新更改。这些更改从本地复制到主机,然后复制到docker容器。
所以我创建了一个新的图像sudo docker commit old_container_id new_image_name(djangotango-on-docker_web)然后,我使用创建的新镜像旋转docker容器。
sudo docker run --name djangotango-web -d --expose 8000 djangotango-on-docker_web gunicorn djangotango.wsgi:应用程序--bind 0.0.0.0:8000
这里djangotango-on-docker_web是我创建的新图像。
但是我的应用程序在此之后给出502错误。我的新容器未正确同步。dockerfile

version: '3.8'

# networks:
# public_network:
# name: public_network
# driver: bridge

services:
web:
build:
context: .
dockerfile: Dockerfile.prod
# image: <aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/django-ec2:web
command: gunicorn djangotango.wsgi:application --bind 0.0.0.0:8000
volumes:
# - .:/home/app/web/
- static_volume:/home/app/web/static
- media_volume:/home/app/web/media
expose:
- 8000
env_file:
- ./.env.staging
networks:
service_network:

db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
env_file:
- ./.env.staging.db
networks:
service_network:
# depends_on:
# - web

# pgadmin:
# image: dpage/pgadmin4
# env_file:
# - ./.env.staging.db
# ports:
# - "8080:80"
# volumes:
# - pgadmin-data:/var/lib/pgadmin
# depends_on:
# - db
# links:
# - "db:pgsql-server"
# environment:
# - PGADMIN_DEFAULT_EMAIL=4652173624824872
# - PGADMIN_DEFAULT_PASSWORD=exampleeee
# - PGADMIN_LISTEN_PORT=80
# networks:
# service_network:

nginx-proxy:
build: nginx
# image: <aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/django-ec2:nginx-proxy
restart: always
ports:
- 443:443
- 80:80
networks:
service_network:
volumes:
- static_volume:/home/app/web/static
- media_volume:/home/app/web/media
- certs:/etc/nginx/certs
- html:/usr/share/nginx/html
- vhost:/etc/nginx/vhost.d
- /var/run/docker.sock:/tmp/docker.sock:ro
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
depends_on:
- web

nginx-proxy-letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
env_file:
- .env.staging.proxy-companion
networks:
service_network:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- certs:/etc/nginx/certs
- html:/usr/share/nginx/html
- vhost:/etc/nginx/vhost.d
depends_on:
- nginx-proxy

networks:
service_network:

volumes:
postgres_data:
pgadmin-data:
static_volume:
media_volume:
certs:
html:
vhost:

如何正确地做呢?我正在域名上运行生产应用程序。
从日志中可以了解到,我的网站现在与其他容器不在同一个网络中。
我不想重建我的docker-compose,它可以解决问题,但会增加图像大小,而且我不建议这样做。

最佳答案

正确的方法是仅使用docker-compose命令,然后继续重建图像:

docker-compose up --build --force-recreate web
docker run文件中列出了许多您需要使用简单的 docker-compose.yml命令重新创建的选项,但有些选项是隐式生成的。您显示的 docker run命令没有 --net选项可附加到Compose网络(这可能会导致您收到错误),并且它没有 -v选项来覆盖图像的静态文件,其中包含来自音量或 .env.staging文件中的设置。
您也几乎永远也不要使用 docker commit。您对图片进行的代码更改是什么,您的同事将如何获得和测试该更改?特别是在这里提到“prod”时,通常不鼓励在生产环境中运行不是从源代码构建并通过常规CI流程进行测试的代码。
(就图像大小而言,已提交的图像将始终大于原始图像; docker build新图像将从基础图像开始,并且通常会更小。提交图像还倾向于丢失诸如默认命令运行之类的选项。)

关于python - 在服务器中对Gunicorn + Nginx + Django dockerized应用程序进行新更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64277572/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com