django - 尝试使用 nginx 和 docker 部署 django 时加载共享库时出错
问题描述
我一直在按照教程(https://www.youtube.com/watch?v=nh1ynJGJuT8)将 django 项目部署到 docker。两个 docker 文件独立工作,但是当我运行 docker-compose-deploy.yml 时,出现以下错误:
Attaching to app_1, proxy_1
app_1 |
app_1 | 128 static files copied to '/vol/web/static', 3 unmodified.
app_1 | Error loading shared library libxml2.so.2: No such file or directory (needed by /usr/local/bin/uwsgi)
app_1 | Error relocating /usr/local/bin/uwsgi: xmlDocSetRootElement: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlCheckVersion: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlNewTextChild: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlNewChild: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlNewDoc: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlReadMemory: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlNewNode: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlDocDumpFormatMemory: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlCleanupParser: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlFreeDoc: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlDocGetRootElement: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlGetProp: symbol not found
app_1 | Error relocating /usr/local/bin/uwsgi: xmlFree: symbol not found
proxy_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
proxy_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
proxy_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
app_1 exited with code 127
proxy_1 | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
proxy_1 | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf differs from the packaged version
proxy_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
proxy_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
proxy_1 | /docker-entrypoint.sh: Configuration complete; ready for start up
proxy_1 | 2021/06/09 10:57:59 [emerg] 1#1: host not found in upstream "app" in /etc/nginx/conf.d/default.conf:9
proxy_1 | nginx: [emerg] host not found in upstream "app" in /etc/nginx/conf.d/default.conf:9
proxy_1 exited with code 1
我尝试将 libxml2 和 libxml2-dev 添加到 Dockerfile 中,但它仍然出现此错误。这是 dockerfiles 和 docker compose:
码头工人-compose.yml
version: '3.7'
services:
app:
build:
context: .
volumes:
- static_data:/vol/web
environment:
- SECRET_KEY=samplesecretkey123
- ALLOWED_HOSTS=127.0.0.1,localhost
proxy:
build:
context: ./proxy
volumes:
- static_data:/vol/static
ports:
- "8080:8080"
depends_on:
- app
volumes:
static_data:
.Docker 文件:
FROM python:3.8-alpine
ENV PATH="/scripts:${PATH}"
COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache --virtual .tmp gcc libc-dev linux-headers libxml2 libxml2-dev libxslt-dev python3-dev gcc build-base libffi-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp
RUN mkdir /app
COPY ./app /app
WORKDIR /app
COPY ./scripts /scripts
RUN chmod +x /scripts/*
RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/static
RUN adduser -D user
RUN chown -R user:user /vol
RUN chmod -R 755 /vol/web
USER user
CMD ["entrypoint.sh"]
./proxy/Dockerfile
FROM nginxinc/nginx-unprivileged:1-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./uwsgi_params /etc/nginx/uwsgi_params
USER root
RUN mkdir -p /vol/static
RUN chmod 755 /vol/static
如果需要更多信息,请告诉我。正如我所说,docker 文件独立工作
解决方案
我将应用程序容器更改为使用 ubuntu 而不是 alpine,它现在可以工作了。libxml2 和 alpine 过去也给我带来了问题,它似乎没有正确安装,原因超出了我的范围
推荐阅读
- twitter-bootstrap - 推特图片未显示,robot.txt 允许访问图片文件夹
- date - 从 Hive SQL 中的日期减去工作日
- php - Phpmyadmin 显示代码而不是被解释
- c++ - 清除 std::map 的 boost::pool_allocator 不会返回 VS2017 中的整个池
- android - Kotlin 中更好的回调方法是什么?侦听器与高阶函数
- java - 如何通过 RestTemplate 传递我的对象
- ios - Swift iOS App 如何在 UITabBarController 上显示 UIView
- .htaccess - 与 Apache 2.2 一起使用的重写在 Apache 2.4 上不起作用
- virtual-machine - 如何在虚拟机中启用虚拟机中的 VT-x
- javascript - 如何在Javascript中关闭对话框后自动更新数据表