如何在群晖NAS的Docker容器中部署和运行自己编写的Python程序

安装了 https://registry.hub.docker.com/_/python/

然后启动的时候不知道怎么办了.

https://s1.ax1x.com/2018/12/15/FaCL4A.png
如何在群晖NAS的Docker容器中部署和运行自己编写的Python程序


11 回复

链接那块把你的 python 项目文件夹映射到容器里,然后 entrypoint 那不是有填命令的地方么,直接写 python 你的容器文件夹 /app.py 这样应该就行。其实就是 docker run -v ~/python-app:/app --entrypoint=["python", "/app/<a target="_blank" href="http://app.py" rel="nofollow noopener">app.py</a>"] python 这个逻辑的 GUI 化大概。


要在群晖NAS的Docker容器中运行自己的Python程序,核心是创建一个Docker镜像,里面包含你的代码和运行环境。直接在NAS的Docker图形界面里操作就行,不用敲命令行。

第一步:准备你的程序 在你的电脑上,创建一个项目文件夹,比如叫 my_python_app。把所有的Python代码文件放进去。关键的一步是在这个文件夹里创建一个名为 Dockerfile 的文件(没有后缀名),内容如下:

# 使用一个轻量级的Python官方镜像
FROM python:3.9-slim

# 设置工作目录,后续命令都在这个目录下执行
WORKDIR /app

# 将当前目录(你电脑上的项目文件夹)所有文件复制到容器的 /app 目录
COPY . /app

# 安装你程序所需的Python依赖包
# 假设你的依赖写在 requirements.txt 文件里
RUN pip install --no-cache-dir -r requirements.txt

# 指定容器启动时默认运行的命令
# 这里假设你的主程序是 main.py
CMD ["python", "./main.py"]

同时,在你的项目文件夹里创建一个 requirements.txt 文件,里面写上需要的包,比如 flaskpandas

第二步:在群晖Docker中部署

  1. 打开群晖的 File Station,在 docker 共享文件夹下(或者任何你能方便访问的地方),新建一个文件夹,例如 my_app
  2. 把你电脑上准备好的整个项目文件夹(包含 Dockerfile, requirements.txt 和你的代码)上传到这个 my_app 文件夹里。
  3. 打开 Docker 套件,进入“映像”页面。
  4. 点击“新增” -> “从Dockerfile构建”。在“路径”里,选择你刚上传的 my_app 文件夹。点击“下一步”,再点“完成”。群晖就会开始根据你的 Dockerfile 构建镜像。
  5. 构建完成后,在“映像”列表里找到它。选中它,点击“启动”。
  6. 在启动配置向导里,给你的容器起个名字,其他设置(如端口映射、文件夹映射)根据你的程序需要来设置。通常你的Python程序如果是个Web服务(比如用Flask写的),就需要在“端口设置”里把容器端口(如5000)映射到NAS的一个本地端口(如5080)。
  7. 一路点击“下一步”直到完成。容器就会启动并运行你的Python程序了。

之后,你可以通过群晖Docker的“容器”页面来查看日志、启动或停止它。

总结一下:就是写好Dockerfile,把代码传到NAS,然后用群晖Docker的图形界面构建和运行。

这样是可以,但是 import 里面的第三方库怎么处理呢?

requirements.txt 和 Dockerfile 我都创建了.

这种建议直接创建个新镜像镜像里把项目文件拷贝进去, pip install 一下把依赖装好,然后直接启动就好了。

明白了,谢谢.

解决方法如下:
1.ssh 登陆 NAS,在个人目录下
mkdir Docker
vi Dockerfile
写入下面内容
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ “python”, “./app.py” ]

vi requirements.txt
写依赖,一行一个

然后
sudo docker build -t python_app .

成功之后登陆 nas web 管理, 启动的时候映射一下即可.

如果只是为了运行 python,还有一个办法
先 python 起一个 alpine3.8 镜像(这个镜像非常小,5M ),启动后在 docker 管理界面进入镜像详情,有一个类似 webshell 的东西,在里面可以安装 python 或者 python3,apk add python/python3
如果要远程用可以安装 ssh 服务,然后就可以像服务器一样登录进去
当然也可以通过 pip 来安装第三方依赖,因为这个是极简的镜像,很多库都没有,可以先安装一些库文件,比如 apk add build-sdk,基本的编译环境就都有了
停止或者启动镜像不影响,别删除就好,

?在服务器上怎么用 docker 部署在群晖里就怎么部署啊,
像你这种单 python 的可以直接用 docker run python 然后指定 entrypoint 吧
觉得命令麻烦的可以写 yml 用 docker-compose 起啊。。。。

docker 学的不到家看看 docker 文档吧

有定制需求就自己打包 image,用别人的就没法支持自己的业务了

另外,lz 如果是需要跑特定功能的 docker,可以找一下看看有没有现成的 image,我之前就找到一个自动更新 godaddy ip 的 docker,非常好用

穿上裤子再放屁

回到顶部