描述清楚需求,让deepseek帮我们写一个demo,文件结构如下
FLASK_API_001
├── app.py
└── Dockerfile
└── requirements.txt
app.py
from flask import Flask, jsonify, request
app = Flask(__name__)
# 根路由
@app.route('/')
def home():
return "Welcome to Flask API!"
# GET请求示例
@app.route('/api/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello, World!"})
# POST请求示例
@app.route('/api/echo', methods=['POST'])
def echo():
data = request.get_json()
return jsonify({"received_data": data}), 201
# 带参数的路由
@app.route('/api/user/<username>', methods=['GET'])
def show_user_profile(username):
return jsonify({"username": username})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Dockerfile,这个一串x代替的字符是我的id,这里不能放出来
# 使用官方Python镜像作为基础镜像
FROM xxxxxx.xuanyuan.run/python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口(Flask默认端口)
EXPOSE 5000
# 定义启动命令
CMD ["python", "app.py"]
依赖文件requirements.txt
flask==3.0.0
上传该文件夹到ubuntu server,通过截图看到上传失败,复制输出到deepseek,deepseek回答是因为权限的问题
使用ls -ld命令查看文件夹权限,可以看到归属权是root
zxd@server001:/home$ ls -ld
drwxr-xr-x 3 root root 4096 Jul 9 16:58 .
修改目录归属权,再次ls -ld的时候已经变成当前用户了
zxd@server001:~$ sudo chown -R zxd:zxd /home/zxd/NewFiler/
[sudo] password for zxd:
zxd@server001:~$ ls -ld /home/zxd/NewFiler/
drwxr-xr-x 2 zxd zxd 4096 Jul 10 09:02 /home/zxd/NewFiler/
zxd@server001:~$
再次上传文件,可以看到文件已经在了
build镜像
docker build -t flask-api-001 .
运行容器,内外端口映射都是5000
docker run -d -p 5000:5000 --name flask-api-001 flask-api-001
至此我们已经成功将api部署到docker内了,现在我们去浏览器里请求看下返回结果
我们请求了helloworld接口,可以看到,返回的内容是正确的,我上文代码里写的一样的