描述清楚需求,讓deepseek幫我們寫一個demo,文件結構如下
FLASK_API_001
├── app.py
└── Dockerfile
└── requirements.txt
app.py
from flask import Flask, jsonify, requestapp = 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接口,可以看到,返回的內容是正確的,我上文代碼里寫的一樣的