1. docker权限问题

命令行提示Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/info: dial unix /var/run/docker.sock: connect: permission denied

解决办法1:sudo + docker命令

解决办法2:将当前用户加入docker用户

sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
docker ps
2. 部署docker + Django + uwsgi项目

uwsgi.ini文件

[uwsgi]
# 使用Nginx连接使用,Django程序所在服务器地址docker + nginx uwsgi_pass 127.0.0.1:8000; include uwsgi_params; 只能通过nginx转发才能访问socket=0.0.0.0:8000
# 直接做web服务器使用,Django程序所在服务器地址(proxy_pass http://127.0.0.1:8000;nginx转发端口和直接宿主机ip端口可以访问)
;http=0.0.0.0:8000
# 项目目录,manage.py 同级目录
chdir=/home/python/crm_django/crm_management
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=/home/python/crm_django/crm_management/crm_management/wsgi.py
# 进程processes=2
# 线程threads=2
# uwsgi服务器角色
master=True
# 存放进程编号文件
pidfile=/home/python/crm_django/crm_management/uwsgi.pid
# 日志文件
daemonize=/home/python/crm_django/crm_management/uwsgi.log
# 指定依赖虚拟环境
virtualenv=/home/python/Python-3.8.6/bin/crm_test/
# 静态文件,先执行python manage.py collectstatic ,setting指定静态文件STATIC_ROOT=os.path.join(BASE_DIR, 'static')
static-map=/static=/home/python/crm_django/crm_management/static

;uwsgi --ini uwsgi.ini   启动uwsgi
;uwsgi --stop uwsgi.pid   关闭uwsgi 若报错执行ps -ef|grep uwsgi 将pid写进uwsgi.pid执行
;uwsgi --reload uwsgi.pid   重启uwsgi 若报错执行ps -ef|grep uwsgi 将pid写进uwsgi.pid执行,注意只有开启uwsgi才能重启

nginx.conf

	server {
		# 监听8001端口
		listen 8001;
		# 本机
		server_name localhost;
		# 默认请求url
		# 开启404
		proxy_intercept_errors on;
		error_page  404 403 500 502 503 504  /404.html;
		location = /404.html {
			   # 放错误页面的目录路径
			   root /home/python/crm_django/crm_management/static;
		}
        # 静态文件
		location /static {
				root /home/python/crm_django/crm_management;
				if ($request_filename ~* .*.(?:js|css)$) 
					{expires 7d;}
		}

		location / {
			include /usr/local/nginx/conf/uwsgi_params;
			#设置请求头,并将头信息传递给服务器端获取用户真实ipproxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			#请求转发到uwsgi服务器
			#proxy_pass http://127.0.0.1:8000;
            uwsgi_pass      127.0.0.1:8000;
            include uwsgi_params;

		}
	}

Dockerfie文件:

FROM python:3.8.6
#MAINTAINER cc 2371273856@qq.com
RUN mkdir -p /code1/crm_django
WORKDIR /code1/crm_django/
ADD . /code1/crm_django/
RUN pip3 install -U pip -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip3 install -r /code1/crm_django/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --no-deps --no-dependencies --trusted-host pypi.tuna.tsinghua.edu.cn

# 推荐使用脚本辅助启动,直接CMD uwsgi --ini uwsgi.ini很坑
CMD ["chmod","+x","/code1/crm_django/start.sh"]
CMD ["sh","-c","/code1/crm_django/start.sh"]

构建docker镜像:

docker build -t crm_django:v1 .

运行docker镜像启动容器

docker run --privileged -it -d -p 8000:8000 --name crm_django crm_django:v1 /bin/bash 

# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -t: 为容器重新分配一个输入终端,通常与 -i 同时使用;
# -d 后台运行
# -–privileged 加权限
# -p 宿主机端口:容器端口  开放容器端口宿主机端口
# /bin/bash可以带上多个脚本,以逗号隔开脚本名称

进入容器:

docker exec -it ed2ae3d901ab /bin/bash 

查看所有容器:

docker ps -a

删除容器:

docker rm 容器id

# 删除所有无效容器
docker rm $(docker ps -qf status=exited)

查看所有镜像

docker images

删除镜像:(先删容器,再删镜像

docker rmi 镜像id

# 删除所有无效镜像
 docker rmi -f $(docker images | grep "<none>" | awk "{print $3}")

查看容器日志

docker logs 容器id

启动、停止、重启指定容器:

docker start/stop/restart 容器id
3. 遇到的报错
报错1:查看容器状态一直是:Exited (0) 4 seconds ago,且docker exec提示Error response from daemon: Container ... is not running,正常应该up

在这里插入图片描述
正常状态
在这里插入图片描述
排除方法

1. docker logs 容器日志查看日志报错;
2. docker run 加上-it /bin/bash,删除容器镜像+重新构建;
3. 只有up状态才能查看容器日志和进入容器,所有1/2两步还不能解决问题建议采用shell脚本启动服务进行调试

报错2:进入docker容器后启动服务页面请求无效使用curl url报错Internal Server Error或者curl: (52) Empty reply from server

排除方法

python manage.py runserver 0.0.0.0:8000启动服务,报错SyntaxError: Generator expression must be parenthesized (widgets.py, line 152)
在这里插入图片描述

答:主要是因为python3.8.6和django1.11.0版本问题,需要将/usr/local/lib/python3.8/site-packages/django/contrib/admin/widgets.py第150行源码后面的逗号去掉

再次在docker中直接python命令启动服务报错:django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")

答:修改django配置文件中DATABASES中port对应数据库ip,确保docker网络可达mysql数据库

再次在docker中使用uwsgi启动服务报错:--- no python application found, check your startup logs for errors ---
在这里插入图片描述

答:主要是uwsgi未发现python环境检查uwsgi.ini文件中目录路径配置是否正常,特别是python虚拟环境路径和wsgi-file文件中wsgi.py文件路径是否正确(我就错乱,搞了好久)

注意:uwsgi.ini 配置http=0.0.0.0:8000和socket=0.0.0.0:8000的区别

最终部署效果
在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_44894663/article/details/127484316

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23242.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注