docker / docker-py

A Python library for the Docker Engine API

Home Page:https://docker-py.readthedocs.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Remote Docker Registry Auth

OOOllie opened this issue · comments

`
class DockerDeployment:

def __init__(self, ip) -> None:
    self.ip = ip
    self.client = DockerClient(f"ssh://{_SSH_USER}@{ip}:22", use_ssh_client=True)
    ssh_adapter = KeyFileSSHAdapter(f"ssh://{_SSH_USER}@{ip}:22")
    self.client.api.mount('http+docker://ssh', ssh_adapter)

def _get_next_port(self):
    containers : list[Container] = self.client.containers.list()
    highest_public_port = 1000
    for container in containers:
        for port in container.ports:
            public_port = int(container.ports[port][0]["HostPort"])
            if public_port > highest_public_port: highest_public_port = public_port

    return highest_public_port + 1

def create_deployment(self, address, repo, image, version, env={}) -> Container:
    port = self._get_next_port()

    default_env = {
        "ADVERTISED_ADDRESS": f"{self.ip}:{port}",
        "LOCAL_ADDRESS": "0.0.0.0:7080",
        "REGISTRY": f"{self.ip}:8500"
    }

    image_url = f"{address}/{repo}/{image}"
    container : Container = self.client.containers.run(
        image=f"{image_url}:{version}",
        ports={"7080": port, "7081": port+1},
        environment=env|default_env,
        auto_remove=True,
        detach=True
    )
    return container

`

So I am using this code to deploy an image onto a remote machine. However, my current machine should not require authentication for the repository since this should be required by the machine deploying the image.

On machine running the deployment I have run docker logout.
On remote machine I have run docker login address to ensure the remote machine has the credentials to pull the image.
However I get the following error:

500 Server Error for http+docker://ssh/v1.45/images/create?tag=0.1.0&fromImage=redacted: Internal Server Error ("Head "redacted/manifests/0.1.0": unknown: Authentication is required")

Is this a limitation of the registry I am using or a limitation of the docker python library/docker? For context, I am using JFrog Artifactory as a private repository.