client = docker.DockerClient(base_url=f"tcp://{DOCKER_IP}:{DOCKER_PORT}", timeout=5)
# 输出Docker版本信息
docker_version = json.dumps(client.version(), indent=1)
print(docker_version)
# 输出容器信息
get_container_id_list = client.containers.list()
container_id_list = []
for ids in get_container_id_list:
container_id_list= container_id_list + ids.image.tags
print(container_id_list)
client = docker.DockerClient(base_url=f"tcp://{DOCKER_IP}:{DOCKER_PORT}", timeout=5)
注意:此步骤最好在容器run之前执行,否则容器卷目录的所有者可能为root,导致SDK的上传出现权限问题
paramiko
和scp
工具将本地的SDK上传至服务器的对应目录import paramiko
from scp import SCPClient
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(DOCKER_IP, 22, DOCKER_USERNAME, DOCKER_PASSWORD)
with SCPClient(ssh.get_transport()) as scp:
# 将本地的文件拷贝到远程主机中
scp.put(f'{SDK_PATH}/{sdk_id}', DOCKER_SDK_PATH, recursive=True)
container = client.containers.run(name=container_name,
image=image,
ports={f"{inner_port}/tcp": outer_port},
volumes={f"{DOCKER_SDK_PATH}/{sdk_id}": {'bind': f"/app/{sdk_id}", 'mode': "rw"}},
mem_limit='4g',
runtime="nvidia",
device_requests=[docker.types.DeviceRequest(capabilities=[['gpu']])],
working_dir=f"/app/{sdk_id}",
detach=True,
auto_remove=True,
tty=True)
command = 'bash -c "chmod +x ./run.sh && ./run.sh"'
container.exec_run(command, detach=True)
def ready_task(timeout, outer_port, interface):
start = time.time()
while (time.time() - start) < timeout:
try:
requests.post(url=f'http://{DOCKER_IP}:{outer_port}/{interface}')
return True
except requests.exceptions.ConnectionError:
time.sleep(0.1)
else:
return False
True
,若超时,则返回False
def clean_task(test_id, sdk_id):
client = docker.DockerClient(base_url=f"tcp://{DOCKER_IP}:{DOCKER_PORT}", timeout=5)
try:
client.containers.get(container_name).stop()
client.containers.get(container_name).remove(force=True)
except (NotFound, APIError):
pass
Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
systemctl daemon-reload
systemctl restart docker
ps -ef | grep docker