我想在不要求用户输入的情况下从python3运行docker登录. 我有三个全局变量REGISTRY_URL, USERNAME, PASSWORD.

我想参选:

os.system(f"echo '{PASSWORD}' | docker login {REGISTRY_URL} -u {USERNAME} --password-stdin")

问题是我的三个全局变量是用户可控的,这可能导致远程代码执行.

如何使用subprocess.run安全地运行此命令?

(注:我不想使用对接器的-p选项,因为按照对接器的建议它是不安全的)

推荐答案

您可以使用子进程的input参数提供密码.运行:

import subprocess

def docker_login(registry_url, username, password):
    command = ["docker", "login", registry_url, "-u", username, "--password-stdin"]
    completed_process = subprocess.run(command, input=password.encode() + b'\n', capture_output=True)
    
    if completed_process.returncode == 0:
        print("Docker login successful!")
    else:
        print("Docker login failed. Error message:")
        print(completed_process.stderr.decode())

docker_login(REGISTRY_URL, USERNAME, PASSWORD)

Python相关问答推荐

在上下文管理器中更改异常类型

Pandas 除以一列中出现的每个值

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

Python中的负前瞻性regex遇到麻烦

Locust请求中的Python和参数

Pandas 填充条件是另一列

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

Gekko:Spring-Mass系统的参数识别

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

如果条件不满足,我如何获得掩码的第一个索引并获得None?

Odoo 16使用NTFS使字段只读

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

pandas:对多级列框架的列进行排序/重新排序

基于多个数组的多个条件将值添加到numpy数组

使用Openpyxl从Excel中的折线图更改图表样式

将链中的矩阵乘法应用于多组值

Tensorflow tokenizer问题.num_words到底做了什么?

使用SeleniumBase保存和加载Cookie时出现问题

使用python playwright从 Select 子菜单中 Select 值

数据框,如果值在范围内,则获取范围和