docker.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import os, io, sys, platform, shutil, time, json, datetime
  2. from api.utils import shell_execute
  3. from api.utils import network
  4. from dotenv import load_dotenv, find_dotenv
  5. import dotenv
  6. from pathlib import Path
  7. def copy_dir(src_path, target_path):
  8. if os.path.isdir(src_path) and os.path.isdir(target_path):
  9. filelist_src = os.listdir(src_path)
  10. for file in filelist_src:
  11. path = os.path.join(os.path.abspath(src_path), file)
  12. if os.path.isdir(path):
  13. path1 = os.path.join(os.path.abspath(target_path), file)
  14. if not os.path.exists(path1):
  15. os.mkdir(path1)
  16. copy_dir(path, path1)
  17. else:
  18. with open(path, 'rb') as read_stream:
  19. contents = read_stream.read()
  20. path1 = os.path.join(target_path, file)
  21. with open(path1, 'wb') as write_stream:
  22. write_stream.write(contents)
  23. return True
  24. else:
  25. return False
  26. def create_app_directory(app_name):
  27. # 判断/data/apps/app_name是否已经存在,如果已经存在,方法结束
  28. path = "/data/apps/"+app_name
  29. isexsits = os.path.exists(path)
  30. if isexsits:
  31. return
  32. # 将apps复制到/data目录
  33. if not os.path.exists("/data"):
  34. os.makedirs("/data")
  35. os.makedirs("/data/apps")
  36. if not os.path.exists("/tmp/docker-library"):
  37. shell_execute.execute_command_output_all("git clone https://ghproxy.com/https://github.com/Websoft9/docker-library.git /tmp")
  38. shell_execute.execute_command_output_all("cp -r /tmp/docker-library/apps/"+app_name+" /data/apps")
  39. def check_app_compose(app_name):
  40. print("check port...")
  41. path = "/data/apps/" + app_name + "/.env"
  42. load_dotenv(find_dotenv(Path.cwd().joinpath(path)))
  43. http_port = os.getenv('APP_HTTP_PORT')
  44. db_port = os.getenv('APP_DB_PORT')
  45. #1.判断/data/apps/app_name/.env中的port是否占用,没有被占用,方法结束(network.py的get_start_port方法)
  46. if http_port != None:
  47. print("modify http port...")
  48. http_port = network.get_start_port(http_port)
  49. dotenv.set_key(path, "APP_HTTP_PORT", http_port)
  50. if db_port != None:
  51. print("modify db port")
  52. db_port = network.get_start_port(db_port)
  53. dotenv.set_key(path, "APP_DB_PORT", db_port)
  54. print("port check complete")
  55. return