{"id":26897291,"url":"https://github.com/atomiechen/handy-docker","last_synced_at":"2025-09-10T17:35:30.606Z","repository":{"id":245860485,"uuid":"819252817","full_name":"atomiechen/handy-docker","owner":"atomiechen","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-04T17:01:52.000Z","size":41,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-03T13:07:28.458Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atomiechen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-06-24T06:30:32.000Z","updated_at":"2024-11-04T17:01:56.000Z","dependencies_parsed_at":"2024-06-24T14:14:39.990Z","dependency_job_id":"1661a4f3-610a-49a0-bf71-3c844421221e","html_url":"https://github.com/atomiechen/handy-docker","commit_stats":null,"previous_names":["atomiechen/handy-docker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/atomiechen/handy-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomiechen%2Fhandy-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomiechen%2Fhandy-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomiechen%2Fhandy-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomiechen%2Fhandy-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atomiechen","download_url":"https://codeload.github.com/atomiechen/handy-docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atomiechen%2Fhandy-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274496048,"owners_count":25296308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-10T02:00:12.551Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-01T04:42:07.377Z","updated_at":"2025-09-10T17:35:30.549Z","avatar_url":"https://github.com/atomiechen.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Handy Docker\n\n## Images, Tags and Dockerfiles\n\nFollowing images are integrated with OpenSSH server / client for remote development. They are built with UID=1000 and GID=1000 to create the non-root user.\n\n- `python-ssh` ([Docker Hub](https://hub.docker.com/repository/docker/atomie/python-ssh)): Python image integrated with SSH. \n  - [`3.10`](https://github.com/atomiechen/handy-docker/blob/main/docker-images/python-ssh/3.10/Dockerfile)\n  - [`3.10-node21`](https://github.com/atomiechen/handy-docker/blob/main/docker-images/python-ssh/3.10-node21/Dockerfile)\n  - [`3.10-node21-ffmpeg`](https://github.com/atomiechen/handy-docker/blob/main/docker-images/python-ssh/3.10-node21-ffmpeg/Dockerfile)\n  - [`3.10-node21-ffmpeg-uv0.4.18`](https://github.com/atomiechen/handy-docker/blob/main/docker-images/python-ssh/3.10-node21-ffmpeg-uv0.4.18/Dockerfile)\n- `pytorch-tzdata-git-ssh` ([Docker Hub](https://hub.docker.com/repository/docker/atomie/pytorch-tzdata-git-ssh)): PyTorch integrated with SSH, tzdata and git.\n  - [`2.2.2-cuda11.8-cudnn8-runtime`](https://github.com/atomiechen/handy-docker/blob/main/docker-images/pytorch-tzdata-git-ssh/2.2.2-cuda11.8-cudnn8-runtime/Dockerfile)\n  - [`2.2.2-cuda11.8-cudnn8-runtime-hdbscan`](https://github.com/atomiechen/handy-docker/blob/main/docker-images/pytorch-tzdata-git-ssh/2.2.2-cuda11.8-cudnn8-runtime-hdbscan/Dockerfile)\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e(Deprecated Images)\u003c/summary\u003e\n\n- `python-ssh-node` ([Docker Hub](https://hub.docker.com/repository/docker/atomie/python-ssh-node)): Python + Node integrated with SSH.\n- `pytorch-tzdata-ssh` ([Docker Hub](https://hub.docker.com/repository/docker/atomie/pytorch-tzdata-ssh)): PyTorch integrated with SSH and tzdata.\n\n\u003c/details\u003e\n\n\n## How to Use These Images\n\nYou can run the container with the following command, where `SALTED_PASSWD` is the salted password for the SSH user:\n\n```sh\ndocker run --name my_ssh_container -e SALTED_PASSWD=my_salted_password -d atomie/python-ssh:3.10\n```\n\nBut usually you want to mount the host's directory and need to make the user ID and group ID consistent between the host and the container to avoid permission issues. You can run the container with environment variables `USER_ID` and `GROUP_ID`:\n\n```sh\ndocker run -d \\\n  --name my_ssh_container \\\n  -e SALTED_PASSWD=my_salted_password \\\n  -e USER_ID=$(id -u) \\\n  -e GROUP_ID=$(id -g) \\\n  -v /path/to/host/dir:/path/to/container/dir \\\n  atomie/python-ssh:3.10\n```\n\n## Generate Salted Password\n\n\u003e [!NOTE]\n\u003e You can use `gen_salted_passwd.sh` to generate the salted password file interactively.\n\nThe encrypted password is generated with salt:\n\n```sh\nCLEAR_PASSWD=\"clear_text_password\"\nSALTED_PASSWD=$(printf $CLEAR_PASSWD | openssl passwd -6 -salt KdN5Re3X2X18 -stdin)\necho $SALTED_PASSWD \u003e salted_passwd\n```\n\n## Docker Secrets\n\nAs an alternative to passing the salted password as an environment variable, you can use Docker secrets to store the salted password in a file and mount it to the container. \n\n```sh\ndocker secret create salted_passwd salted_passwd\n```\n\nThen you can run the container by specifying the secret file path to the environment variable `SALTED_PASSWD_FILE`:\n\n```sh\ndocker run -d \\\n  --name my_ssh_container \\\n  --secret salted_passwd \\\n  -e SALTED_PASSWD_FILE=/run/secrets/salted_passwd \\\n  atomie/python-ssh:3.10\n```\n\n\n## Handy scripts\n\nScripts in `scripts` directory:\n\n- `start_docker.sh`: script for (re)starting a container with SSH-integration. \n- `start_super_docker.sh`: script for further sharing the host's docker socket and binary with the container.\n- `gen_salted_passwd.sh`: interactive script for generating the salted password to a file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatomiechen%2Fhandy-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatomiechen%2Fhandy-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatomiechen%2Fhandy-docker/lists"}