Merge branch 'master' of http://git.d-popov.com/popov/scripts
This commit is contained in:
@@ -27,6 +27,19 @@ docker pull portainer/helper-reset-password
|
|||||||
docker run --rm -v /mnt/storage/docker_volumes/portainer_data:/data portainer/helper-reset-password
|
docker run --rm -v /mnt/storage/docker_volumes/portainer_data:/data portainer/helper-reset-password
|
||||||
|
|
||||||
|
|
||||||
|
# update portainer
|
||||||
|
<!-- // To update to the latest version of Portainer Server, use the following commands to stop then remove the old version. Your other applications/containers will not be removed. -->
|
||||||
|
docker stop portainer
|
||||||
|
|
||||||
|
docker rm portainer
|
||||||
|
<!-- start again -->
|
||||||
|
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always --pull=always -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/data/docker_vol/portainer:/data portainer/portainer-ce
|
||||||
|
|
||||||
|
# start portainer with a database copy (/portainer-database-backup.db)
|
||||||
|
docker run --rm -v /mnt/data/docker_vol/portainer:/data -v /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/BACKUPS/20251118-133605:/backup alpine sh -c "rm /data/portainer.db && cp /backup/portainer-database-backup.db /data/portainer.db && ls -lh /data/portainer.db"
|
||||||
|
# remove backup/broken database
|
||||||
|
docker run --rm -v /mnt/data/docker_vol/portainer:/data alpine rm /data/portainer.db && echo "Old database removed"
|
||||||
|
|
||||||
# start
|
# start
|
||||||
sudo systemctl start docker
|
sudo systemctl start docker
|
||||||
sudo systemctl enable docker
|
sudo systemctl enable docker
|
||||||
|
|||||||
@@ -29,4 +29,17 @@ docker exec -u 0 nextcloud php occ trashbin:cleanup --all-users
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
27.0.2.1 ->> 28.0.14 -> 29.0.10 -> 30.0.4
|
27.0.2.1 ->> 28.0.14 -> 29.0.10 -> 30.0.4
|
||||||
|
|
||||||
|
|
||||||
|
# NEXTCLOUD AIO
|
||||||
|
get pass(in container sh):
|
||||||
|
/mnt/docker-aio-config/data# ls
|
||||||
|
backupsecret configuration.json session_date_file
|
||||||
|
a4a2bed68bc4:/mnt/docker-aio-config/data# cat configuration.json | grep pass
|
||||||
|
citadel showcase turbofan wick shiftless travel woof dicing
|
||||||
|
backup:
|
||||||
|
location:/mnt/storage/containers/nextcloud_aio/backup$
|
||||||
|
pass: 0d760cd12d0c75991344ce9dcb599e2bfb85ef40db3ebe29
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,3 +20,17 @@ git commit -m "Merged upstream/main"
|
|||||||
# remove upstream
|
# remove upstream
|
||||||
git remote remove upstream
|
git remote remove upstream
|
||||||
git remote -v
|
git remote -v
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
http://192.168.1.36:9000
|
||||||
|
|
||||||
|
Name: localhost
|
||||||
|
Environment address: 192.168.1.36:9001
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
48
portainer-compose-stacks/BACKUPS/20251118-133605/README.md
Normal file
48
portainer-compose-stacks/BACKUPS/20251118-133605/README.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Portainer Backup - November 18, 2025
|
||||||
|
|
||||||
|
This backup was created before resetting the Portainer database due to stale environment configurations causing the UI to show "environment unreachable" errors.
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
|
### Docker Compose Files
|
||||||
|
- `all-containers-compose.yml` - Combined compose file for ALL running containers
|
||||||
|
- `container-*.yml` - Individual compose files for each container
|
||||||
|
|
||||||
|
### Database Backups
|
||||||
|
- `portainer-database-backup.db` - Full Portainer database from before reset (512KB)
|
||||||
|
- `portainer-automatic-backup.db.bak` - Automatic backup created by Portainer during upgrade
|
||||||
|
|
||||||
|
### Running Containers at Backup Time
|
||||||
|
1. portainer
|
||||||
|
2. windows
|
||||||
|
3. rincoin-node2
|
||||||
|
4. amd-strix-halo-llama-rocm
|
||||||
|
5. amd-strix-halo-llama-vulkan-radv
|
||||||
|
6. amd-strix-halo-llama-vulkan-amdvlk
|
||||||
|
7. docker-model-runner
|
||||||
|
|
||||||
|
## Restore Instructions
|
||||||
|
|
||||||
|
### To restore Portainer database:
|
||||||
|
```bash
|
||||||
|
docker stop portainer
|
||||||
|
docker run --rm -v /mnt/data/docker_vol/portainer:/data -v $(pwd):/backup alpine \
|
||||||
|
cp /backup/portainer-database-backup.db /data/portainer.db
|
||||||
|
docker start portainer
|
||||||
|
```
|
||||||
|
|
||||||
|
### To restore individual containers:
|
||||||
|
```bash
|
||||||
|
docker-compose -f container-NAME.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### To restore all containers:
|
||||||
|
```bash
|
||||||
|
docker-compose -f all-containers-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
- The Portainer configuration export from the UI was not included (would need to be exported manually)
|
||||||
|
- These backups were generated using docker-autocompose tool
|
||||||
|
- Backup created: 2025-11-18 13:36:05
|
||||||
|
|
||||||
@@ -0,0 +1,487 @@
|
|||||||
|
networks:
|
||||||
|
amd-strix-halo-network:
|
||||||
|
external: true
|
||||||
|
name: "amd-strix-halo-network"
|
||||||
|
rincoin_default:
|
||||||
|
external: true
|
||||||
|
name: "rincoin_default"
|
||||||
|
windows_default:
|
||||||
|
external: true
|
||||||
|
name: "windows_default"
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
amd-strix-halo-llama-rocm:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "/bin/bash"
|
||||||
|
|
||||||
|
container_name: "amd-strix-halo-llama-rocm"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/kfd:/dev/kfd"
|
||||||
|
- "/dev/dri:/dev/dri"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "DISPLAY=:0"
|
||||||
|
- "NVIDIA_VISIBLE_DEVICES=all"
|
||||||
|
- "NVIDIA_DRIVER_CAPABILITIES=all"
|
||||||
|
- "PATH=/opt/rocm-7.0/bin:/opt/rocm-7.0/llvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "container=oci"
|
||||||
|
- "ROCM_PATH=/opt/rocm-7.0"
|
||||||
|
- "HIP_PLATFORM=amd"
|
||||||
|
- "HIP_PATH=/opt/rocm-7.0"
|
||||||
|
- "HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin"
|
||||||
|
- "HIP_INCLUDE_PATH=/opt/rocm-7.0/include"
|
||||||
|
- "HIP_LIB_PATH=/opt/rocm-7.0/lib"
|
||||||
|
- "HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode"
|
||||||
|
- "LD_LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64:/opt/rocm-7.0/llvm/lib"
|
||||||
|
- "LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64"
|
||||||
|
- "CPATH=/opt/rocm-7.0/include"
|
||||||
|
- "PKG_CONFIG_PATH=/opt/rocm-7.0/lib/pkgconfig"
|
||||||
|
|
||||||
|
hostname: "2e51d282e4eb"
|
||||||
|
|
||||||
|
image: "kyuz0/amd-strix-halo-toolboxes:rocm-7rc-rocwmma"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "b1864fdd57497c82872e0e6ab2dfe1e8debf08ace59f99770d77e1f6470ceec2"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:46c514ed4c8812d12463c0f02ade88a6efa5cc5589c68c5fc98d21966116bbba"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "portainer-compose-stacks"
|
||||||
|
com.docker.compose.project.config_files: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/amd-strix-halo-toolboxes.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks"
|
||||||
|
com.docker.compose.service: "amd-strix-halo-llama-rocm"
|
||||||
|
com.docker.compose.version: "2.39.4"
|
||||||
|
io.buildah.version: "1.41.3"
|
||||||
|
license: "MIT"
|
||||||
|
name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.license: "MIT"
|
||||||
|
org.opencontainers.image.name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.url: "https://fedoraproject.org/"
|
||||||
|
org.opencontainers.image.vendor: "Fedora Project"
|
||||||
|
org.opencontainers.image.version: "rawhide"
|
||||||
|
vendor: "Fedora Project"
|
||||||
|
version: "rawhide"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "amd-strix-halo-network"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8080:8080/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
stdin_open: true
|
||||||
|
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/home/db/Downloads:/mnt/dl"
|
||||||
|
- "/home/db:/home/db"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/data:/data"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/models:/models"
|
||||||
|
|
||||||
|
working_dir: "/models"
|
||||||
|
|
||||||
|
amd-strix-halo-llama-vulkan-amdvlk:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "/bin/bash"
|
||||||
|
|
||||||
|
container_name: "amd-strix-halo-llama-vulkan-amdvlk"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/dri:/dev/dri"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "DISPLAY=:0"
|
||||||
|
- "PATH=/usr/local/bin:/usr/bin"
|
||||||
|
- "container=oci"
|
||||||
|
|
||||||
|
hostname: "c8be19c21b4e"
|
||||||
|
|
||||||
|
image: "kyuz0/amd-strix-halo-toolboxes:vulkan-amdvlk"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "1430c92ed79d5a3fc253eda643fa9adf142075a04f23daa62a2dd75d1bc5b7fc"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:f22a85316fff63e48b37939a242ca9f9c1fe190c9b91edc58d78d2ce8f6b9307"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "portainer-compose-stacks"
|
||||||
|
com.docker.compose.project.config_files: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/amd-strix-halo-toolboxes.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks"
|
||||||
|
com.docker.compose.service: "amd-strix-halo-llama-vulkan-amdvlk"
|
||||||
|
com.docker.compose.version: "2.39.4"
|
||||||
|
io.buildah.version: "1.41.3"
|
||||||
|
license: "MIT"
|
||||||
|
name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.license: "MIT"
|
||||||
|
org.opencontainers.image.name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.url: "https://fedoraproject.org/"
|
||||||
|
org.opencontainers.image.vendor: "Fedora Project"
|
||||||
|
org.opencontainers.image.version: "rawhide"
|
||||||
|
vendor: "Fedora Project"
|
||||||
|
version: "rawhide"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "amd-strix-halo-network"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8082:8080/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
stdin_open: true
|
||||||
|
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/home/db/Downloads:/mnt/dl"
|
||||||
|
- "/home/db:/home/db"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/data:/data"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/models:/models"
|
||||||
|
|
||||||
|
working_dir: "/models"
|
||||||
|
|
||||||
|
amd-strix-halo-llama-vulkan-radv:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "/bin/bash"
|
||||||
|
|
||||||
|
container_name: "amd-strix-halo-llama-vulkan-radv"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/dri:/dev/dri"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "DISPLAY=:0"
|
||||||
|
- "PATH=/usr/local/bin:/usr/bin"
|
||||||
|
- "container=oci"
|
||||||
|
|
||||||
|
hostname: "f16c8811fad8"
|
||||||
|
|
||||||
|
image: "kyuz0/amd-strix-halo-toolboxes:vulkan-radv"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "b8d7ece75362f882f6b566c45be63ddc7ef9196bf9cb4cd751229013cfd7751e"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:523867cfaf7346460b4857ea164353a3048ef24f844e627535c1639c3f1b1b3f"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "portainer-compose-stacks"
|
||||||
|
com.docker.compose.project.config_files: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/amd-strix-halo-toolboxes.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks"
|
||||||
|
com.docker.compose.service: "amd-strix-halo-llama-vulkan-radv"
|
||||||
|
com.docker.compose.version: "2.39.4"
|
||||||
|
io.buildah.version: "1.41.3"
|
||||||
|
license: "MIT"
|
||||||
|
name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.license: "MIT"
|
||||||
|
org.opencontainers.image.name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.url: "https://fedoraproject.org/"
|
||||||
|
org.opencontainers.image.vendor: "Fedora Project"
|
||||||
|
org.opencontainers.image.version: "rawhide"
|
||||||
|
vendor: "Fedora Project"
|
||||||
|
version: "rawhide"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "amd-strix-halo-network"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8081:8080/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
stdin_open: true
|
||||||
|
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/home/db/Downloads:/mnt/dl"
|
||||||
|
- "/home/db:/home/db"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/data:/data"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/models:/models"
|
||||||
|
|
||||||
|
working_dir: "/models"
|
||||||
|
|
||||||
|
docker-model-runner:
|
||||||
|
container_name: "docker-model-runner"
|
||||||
|
entrypoint:
|
||||||
|
- "/app/model-runner"
|
||||||
|
environment:
|
||||||
|
- "MODEL_RUNNER_PORT=12434"
|
||||||
|
- "MODEL_RUNNER_ENVIRONMENT=moby"
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "MODEL_RUNNER_SOCK=/var/run/model-runner/model-runner.sock"
|
||||||
|
- "LLAMA_SERVER_PATH=/app/bin"
|
||||||
|
- "HOME=/home/modelrunner"
|
||||||
|
- "MODELS_PATH=/models"
|
||||||
|
- "LD_LIBRARY_PATH=/app/lib"
|
||||||
|
hostname: "b1ab3b3c51a3"
|
||||||
|
image: "docker/model-runner:latest"
|
||||||
|
ipc: "private"
|
||||||
|
labels:
|
||||||
|
com.docker.desktop.service: "model-runner"
|
||||||
|
com.docker.model-runner.role: "controller"
|
||||||
|
org.opencontainers.image.ref.name: "ubuntu"
|
||||||
|
org.opencontainers.image.version: "24.04"
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
network_mode: "bridge"
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:12434:12434/tcp"
|
||||||
|
restart: "always"
|
||||||
|
user: "modelrunner"
|
||||||
|
volumes:
|
||||||
|
- "docker-model-runner-models:/models"
|
||||||
|
working_dir: "/app"
|
||||||
|
|
||||||
|
portainer:
|
||||||
|
|
||||||
|
container_name: "portainer"
|
||||||
|
|
||||||
|
entrypoint:
|
||||||
|
- "/portainer"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
|
||||||
|
hostname: "c64ad6b64b85"
|
||||||
|
|
||||||
|
image: "portainer/portainer-ce"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.desktop.extension.api.version: ">= 0.2.2"
|
||||||
|
com.docker.desktop.extension.icon: "https://portainer-io-assets.sfo2.cdn.digitaloceanspaces.com/logos/portainer.png"
|
||||||
|
com.docker.extension.additional-urls: "[{\"title\":\"Website\",\"url\":\"https://www.portainer.io?utm_campaign=DockerCon&utm_source=DockerDesktop\"\
|
||||||
|
},{\"title\":\"Documentation\",\"url\":\"https://docs.portainer.io\"},{\"title\":\"Support\",\"\
|
||||||
|
url\":\"https://join.slack.com/t/portainer/shared_invite/zt-txh3ljab-52QHTyjCqbe5RibC2lcjKA\"\
|
||||||
|
}]"
|
||||||
|
com.docker.extension.detailed-description: "<p data-renderer-start-pos=\"226\">Portainer’s\
|
||||||
|
\ Docker Desktop extension gives you access to all of Portainer’s rich management functionality\
|
||||||
|
\ within your docker desktop experience.</p><h2 data-renderer-start-pos=\"374\">With Portainer\
|
||||||
|
\ you can:</h2><ul><li>See all your running containers</li><li>Easily view all of your container\
|
||||||
|
\ logs</li><li>Console into containers</li><li>Easily deploy your code into containers using a\
|
||||||
|
\ simple form</li><li>Turn your YAML into custom templates for easy reuse</li></ul><h2 data-renderer-start-pos=\"\
|
||||||
|
660\">About Portainer </h2><p data-renderer-start-pos=\"680\">Portainer is the worlds’\
|
||||||
|
\ most popular universal container management platform with more than 650,000 active monthly users.\
|
||||||
|
\ Portainer can be used to manage Docker Standalone, Kubernetes and Docker Swarm environments\
|
||||||
|
\ through a single common interface. It includes a simple GitOps automation engine and a Kube\
|
||||||
|
\ API. </p><p data-renderer-start-pos=\"1006\">Portainer Business Edition is our fully supported\
|
||||||
|
\ commercial grade product for business-wide use. It includes all the functionality that businesses\
|
||||||
|
\ need to manage containers at scale. Visit <a class=\"sc-jKJlTe dPfAtb\" href=\"http://portainer.io/\"\
|
||||||
|
\ title=\"http://Portainer.io\" data-renderer-mark=\"true\">Portainer.io</a> to learn more about\
|
||||||
|
\ Portainer Business and <a class=\"sc-jKJlTe dPfAtb\" href=\"http://portainer.io/take-3?utm_campaign=DockerCon&utm_source=Docker%20Desktop\"\
|
||||||
|
\ title=\"http://portainer.io/take-3?utm_campaign=DockerCon&utm_source=Docker%20Desktop\"\
|
||||||
|
\ data-renderer-mark=\"true\">get 3 free nodes.</a></p>"
|
||||||
|
com.docker.extension.publisher-url: "https://www.portainer.io"
|
||||||
|
com.docker.extension.screenshots: "[{\"alt\": \"screenshot one\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-1.png\"\
|
||||||
|
},{\"alt\": \"screenshot two\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-2.png\"\
|
||||||
|
},{\"alt\": \"screenshot three\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-3.png\"\
|
||||||
|
},{\"alt\": \"screenshot four\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-4.png\"\
|
||||||
|
},{\"alt\": \"screenshot five\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-5.png\"\
|
||||||
|
},{\"alt\": \"screenshot six\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-6.png\"\
|
||||||
|
},{\"alt\": \"screenshot seven\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-7.png\"\
|
||||||
|
},{\"alt\": \"screenshot eight\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-8.png\"\
|
||||||
|
},{\"alt\": \"screenshot nine\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-9.png\"\
|
||||||
|
}]"
|
||||||
|
io.portainer.server: "true"
|
||||||
|
org.opencontainers.image.description: "Docker container management made simple, with the world’s\
|
||||||
|
\ most popular GUI-based container management platform."
|
||||||
|
org.opencontainers.image.title: "Portainer"
|
||||||
|
org.opencontainers.image.vendor: "Portainer.io"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
network_mode: "bridge"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8000:8000/tcp"
|
||||||
|
- "9000:9000/tcp"
|
||||||
|
|
||||||
|
restart: "always"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/mnt/data/docker_vol/portainer:/data"
|
||||||
|
- "/var/run/docker.sock:/var/run/docker.sock"
|
||||||
|
|
||||||
|
working_dir: "/"
|
||||||
|
|
||||||
|
rincoin-node2:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "-datadir=/data"
|
||||||
|
- "-conf=/data/rincoin.conf"
|
||||||
|
- "-printtoconsole"
|
||||||
|
|
||||||
|
container_name: "rincoin-node2"
|
||||||
|
|
||||||
|
entrypoint:
|
||||||
|
- "/usr/local/bin/rincoind"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "DEBIAN_FRONTEND=noninteractive"
|
||||||
|
|
||||||
|
hostname: "9a6d58857cd0"
|
||||||
|
|
||||||
|
image: "rincoin-node:latest"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "c538f569d76e1edec24710e86694448f59d7f59ad1cd83a44d9aaa2ec32e89ca"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:d0934cced84238cb1b9e090a5b27561dc90355ec108571fc3a8ae687267fa087"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "rincoin"
|
||||||
|
com.docker.compose.project.config_files: "/data/compose/14/docker-compose.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/data/compose/14"
|
||||||
|
com.docker.compose.replace: "6b21373b29365c8eab15f7f7450f47ff5e18984c9c5e11ff2ab468a2e6eda26b"
|
||||||
|
com.docker.compose.service: "rincoin-node"
|
||||||
|
com.docker.compose.version: ""
|
||||||
|
org.opencontainers.image.ref.name: "ubuntu"
|
||||||
|
org.opencontainers.image.version: "22.04"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "rincoin_default"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "9555:9555/tcp"
|
||||||
|
- "9556:9556/tcp"
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
user: "rin"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/mnt/data/docker_vol/rincoin/rincoin-node/data:/data"
|
||||||
|
- "/mnt/data/docker_vol/rincoin/rincoin-node/rincoin.conf:/data/rincoin.conf:ro"
|
||||||
|
|
||||||
|
working_dir: "/opt"
|
||||||
|
|
||||||
|
windows:
|
||||||
|
|
||||||
|
container_name: "windows"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/kvm:/dev/kvm"
|
||||||
|
- "/dev/net/tun:/dev/net/tun"
|
||||||
|
- "/dev/nvme0n1p8:/disk2"
|
||||||
|
|
||||||
|
entrypoint:
|
||||||
|
- "/usr/bin/tini"
|
||||||
|
- "-s"
|
||||||
|
- "/run/entry.sh"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "RAM_SIZE=8G"
|
||||||
|
- "CPU_CORES=4"
|
||||||
|
- "VERSION=11"
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "DISK_SIZE=64G"
|
||||||
|
|
||||||
|
hostname: "b54f26e81e8a"
|
||||||
|
|
||||||
|
image: "dockurr/windows"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "946a6f405cd99fc70b051d30032fd67cc15601412a5edd38ae1960a013099d20"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:df07df026e7d52a3416b557e9e40a829982746ef3d2924e8e5b92787c2e5f269"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "windows"
|
||||||
|
com.docker.compose.project.config_files: "/data/compose/3/docker-compose.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/data/compose/3"
|
||||||
|
com.docker.compose.service: "windows"
|
||||||
|
com.docker.compose.version: ""
|
||||||
|
org.opencontainers.image.created: "2025-05-06T04:50:51.502Z"
|
||||||
|
org.opencontainers.image.description: "Windows inside a Docker container."
|
||||||
|
org.opencontainers.image.licenses: "MIT"
|
||||||
|
org.opencontainers.image.revision: "868c8af289a1012cd7c8bf2c9a2bba298eeb8dee"
|
||||||
|
org.opencontainers.image.source: "https://github.com/dockur/windows"
|
||||||
|
org.opencontainers.image.title: "Windows"
|
||||||
|
org.opencontainers.image.url: "https://github.com/dockur/windows"
|
||||||
|
org.opencontainers.image.version: "4.35"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "windows_default"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "1433:1433/tcp"
|
||||||
|
- "3389:3389/tcp"
|
||||||
|
- "3389:3389/udp"
|
||||||
|
- "8006:8006/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "always"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/mnt/data/docker_vol/windows:/storage"
|
||||||
|
- "/mnt/shared:/data"
|
||||||
|
|
||||||
|
working_dir: "/"
|
||||||
|
|
||||||
|
version: "3.6"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
docker-model-runner-models:
|
||||||
|
external: true
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
networks:
|
||||||
|
amd-strix-halo-network:
|
||||||
|
external: true
|
||||||
|
name: "amd-strix-halo-network"
|
||||||
|
|
||||||
|
services:
|
||||||
|
amd-strix-halo-llama-rocm:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "/bin/bash"
|
||||||
|
|
||||||
|
container_name: "amd-strix-halo-llama-rocm"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/kfd:/dev/kfd"
|
||||||
|
- "/dev/dri:/dev/dri"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "DISPLAY=:0"
|
||||||
|
- "NVIDIA_VISIBLE_DEVICES=all"
|
||||||
|
- "NVIDIA_DRIVER_CAPABILITIES=all"
|
||||||
|
- "PATH=/opt/rocm-7.0/bin:/opt/rocm-7.0/llvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "container=oci"
|
||||||
|
- "ROCM_PATH=/opt/rocm-7.0"
|
||||||
|
- "HIP_PLATFORM=amd"
|
||||||
|
- "HIP_PATH=/opt/rocm-7.0"
|
||||||
|
- "HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin"
|
||||||
|
- "HIP_INCLUDE_PATH=/opt/rocm-7.0/include"
|
||||||
|
- "HIP_LIB_PATH=/opt/rocm-7.0/lib"
|
||||||
|
- "HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode"
|
||||||
|
- "LD_LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64:/opt/rocm-7.0/llvm/lib"
|
||||||
|
- "LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64"
|
||||||
|
- "CPATH=/opt/rocm-7.0/include"
|
||||||
|
- "PKG_CONFIG_PATH=/opt/rocm-7.0/lib/pkgconfig"
|
||||||
|
|
||||||
|
hostname: "2e51d282e4eb"
|
||||||
|
|
||||||
|
image: "kyuz0/amd-strix-halo-toolboxes:rocm-7rc-rocwmma"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "b1864fdd57497c82872e0e6ab2dfe1e8debf08ace59f99770d77e1f6470ceec2"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:46c514ed4c8812d12463c0f02ade88a6efa5cc5589c68c5fc98d21966116bbba"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "portainer-compose-stacks"
|
||||||
|
com.docker.compose.project.config_files: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/amd-strix-halo-toolboxes.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks"
|
||||||
|
com.docker.compose.service: "amd-strix-halo-llama-rocm"
|
||||||
|
com.docker.compose.version: "2.39.4"
|
||||||
|
io.buildah.version: "1.41.3"
|
||||||
|
license: "MIT"
|
||||||
|
name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.license: "MIT"
|
||||||
|
org.opencontainers.image.name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.url: "https://fedoraproject.org/"
|
||||||
|
org.opencontainers.image.vendor: "Fedora Project"
|
||||||
|
org.opencontainers.image.version: "rawhide"
|
||||||
|
vendor: "Fedora Project"
|
||||||
|
version: "rawhide"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "amd-strix-halo-network"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8080:8080/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
stdin_open: true
|
||||||
|
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/home/db/Downloads:/mnt/dl"
|
||||||
|
- "/home/db:/home/db"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/data:/data"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/models:/models"
|
||||||
|
|
||||||
|
working_dir: "/models"
|
||||||
|
|
||||||
|
version: "3.6"
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
networks:
|
||||||
|
amd-strix-halo-network:
|
||||||
|
external: true
|
||||||
|
name: "amd-strix-halo-network"
|
||||||
|
|
||||||
|
services:
|
||||||
|
amd-strix-halo-llama-vulkan-amdvlk:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "/bin/bash"
|
||||||
|
|
||||||
|
container_name: "amd-strix-halo-llama-vulkan-amdvlk"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/dri:/dev/dri"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "DISPLAY=:0"
|
||||||
|
- "PATH=/usr/local/bin:/usr/bin"
|
||||||
|
- "container=oci"
|
||||||
|
|
||||||
|
hostname: "c8be19c21b4e"
|
||||||
|
|
||||||
|
image: "kyuz0/amd-strix-halo-toolboxes:vulkan-amdvlk"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "1430c92ed79d5a3fc253eda643fa9adf142075a04f23daa62a2dd75d1bc5b7fc"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:f22a85316fff63e48b37939a242ca9f9c1fe190c9b91edc58d78d2ce8f6b9307"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "portainer-compose-stacks"
|
||||||
|
com.docker.compose.project.config_files: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/amd-strix-halo-toolboxes.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks"
|
||||||
|
com.docker.compose.service: "amd-strix-halo-llama-vulkan-amdvlk"
|
||||||
|
com.docker.compose.version: "2.39.4"
|
||||||
|
io.buildah.version: "1.41.3"
|
||||||
|
license: "MIT"
|
||||||
|
name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.license: "MIT"
|
||||||
|
org.opencontainers.image.name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.url: "https://fedoraproject.org/"
|
||||||
|
org.opencontainers.image.vendor: "Fedora Project"
|
||||||
|
org.opencontainers.image.version: "rawhide"
|
||||||
|
vendor: "Fedora Project"
|
||||||
|
version: "rawhide"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "amd-strix-halo-network"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8082:8080/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
stdin_open: true
|
||||||
|
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/home/db/Downloads:/mnt/dl"
|
||||||
|
- "/home/db:/home/db"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/data:/data"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/models:/models"
|
||||||
|
|
||||||
|
working_dir: "/models"
|
||||||
|
|
||||||
|
version: "3.6"
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
networks:
|
||||||
|
amd-strix-halo-network:
|
||||||
|
external: true
|
||||||
|
name: "amd-strix-halo-network"
|
||||||
|
|
||||||
|
services:
|
||||||
|
amd-strix-halo-llama-vulkan-radv:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "/bin/bash"
|
||||||
|
|
||||||
|
container_name: "amd-strix-halo-llama-vulkan-radv"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/dri:/dev/dri"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "DISPLAY=:0"
|
||||||
|
- "PATH=/usr/local/bin:/usr/bin"
|
||||||
|
- "container=oci"
|
||||||
|
|
||||||
|
hostname: "f16c8811fad8"
|
||||||
|
|
||||||
|
image: "kyuz0/amd-strix-halo-toolboxes:vulkan-radv"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "b8d7ece75362f882f6b566c45be63ddc7ef9196bf9cb4cd751229013cfd7751e"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:523867cfaf7346460b4857ea164353a3048ef24f844e627535c1639c3f1b1b3f"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "portainer-compose-stacks"
|
||||||
|
com.docker.compose.project.config_files: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/amd-strix-halo-toolboxes.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks"
|
||||||
|
com.docker.compose.service: "amd-strix-halo-llama-vulkan-radv"
|
||||||
|
com.docker.compose.version: "2.39.4"
|
||||||
|
io.buildah.version: "1.41.3"
|
||||||
|
license: "MIT"
|
||||||
|
name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.license: "MIT"
|
||||||
|
org.opencontainers.image.name: "fedora-minimal"
|
||||||
|
org.opencontainers.image.url: "https://fedoraproject.org/"
|
||||||
|
org.opencontainers.image.vendor: "Fedora Project"
|
||||||
|
org.opencontainers.image.version: "rawhide"
|
||||||
|
vendor: "Fedora Project"
|
||||||
|
version: "rawhide"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "amd-strix-halo-network"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8081:8080/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
stdin_open: true
|
||||||
|
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/home/db/Downloads:/mnt/dl"
|
||||||
|
- "/home/db:/home/db"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/data:/data"
|
||||||
|
- "/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/models:/models"
|
||||||
|
|
||||||
|
working_dir: "/models"
|
||||||
|
|
||||||
|
version: "3.6"
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
services:
|
||||||
|
docker-model-runner:
|
||||||
|
container_name: "docker-model-runner"
|
||||||
|
entrypoint:
|
||||||
|
- "/app/model-runner"
|
||||||
|
environment:
|
||||||
|
- "MODEL_RUNNER_PORT=12434"
|
||||||
|
- "MODEL_RUNNER_ENVIRONMENT=moby"
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "MODEL_RUNNER_SOCK=/var/run/model-runner/model-runner.sock"
|
||||||
|
- "LLAMA_SERVER_PATH=/app/bin"
|
||||||
|
- "HOME=/home/modelrunner"
|
||||||
|
- "MODELS_PATH=/models"
|
||||||
|
- "LD_LIBRARY_PATH=/app/lib"
|
||||||
|
hostname: "b1ab3b3c51a3"
|
||||||
|
image: "docker/model-runner:latest"
|
||||||
|
ipc: "private"
|
||||||
|
labels:
|
||||||
|
com.docker.desktop.service: "model-runner"
|
||||||
|
com.docker.model-runner.role: "controller"
|
||||||
|
org.opencontainers.image.ref.name: "ubuntu"
|
||||||
|
org.opencontainers.image.version: "24.04"
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
network_mode: "bridge"
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:12434:12434/tcp"
|
||||||
|
restart: "always"
|
||||||
|
user: "modelrunner"
|
||||||
|
volumes:
|
||||||
|
- "docker-model-runner-models:/models"
|
||||||
|
working_dir: "/app"
|
||||||
|
version: "3.6"
|
||||||
|
volumes:
|
||||||
|
docker-model-runner-models:
|
||||||
|
external: true
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
services:
|
||||||
|
portainer:
|
||||||
|
|
||||||
|
container_name: "portainer"
|
||||||
|
|
||||||
|
entrypoint:
|
||||||
|
- "/portainer"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
|
||||||
|
hostname: "c64ad6b64b85"
|
||||||
|
|
||||||
|
image: "portainer/portainer-ce"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.desktop.extension.api.version: ">= 0.2.2"
|
||||||
|
com.docker.desktop.extension.icon: "https://portainer-io-assets.sfo2.cdn.digitaloceanspaces.com/logos/portainer.png"
|
||||||
|
com.docker.extension.additional-urls: "[{\"title\":\"Website\",\"url\":\"https://www.portainer.io?utm_campaign=DockerCon&utm_source=DockerDesktop\"\
|
||||||
|
},{\"title\":\"Documentation\",\"url\":\"https://docs.portainer.io\"},{\"title\":\"Support\",\"\
|
||||||
|
url\":\"https://join.slack.com/t/portainer/shared_invite/zt-txh3ljab-52QHTyjCqbe5RibC2lcjKA\"\
|
||||||
|
}]"
|
||||||
|
com.docker.extension.detailed-description: "<p data-renderer-start-pos=\"226\">Portainer’s\
|
||||||
|
\ Docker Desktop extension gives you access to all of Portainer’s rich management functionality\
|
||||||
|
\ within your docker desktop experience.</p><h2 data-renderer-start-pos=\"374\">With Portainer\
|
||||||
|
\ you can:</h2><ul><li>See all your running containers</li><li>Easily view all of your container\
|
||||||
|
\ logs</li><li>Console into containers</li><li>Easily deploy your code into containers using a\
|
||||||
|
\ simple form</li><li>Turn your YAML into custom templates for easy reuse</li></ul><h2 data-renderer-start-pos=\"\
|
||||||
|
660\">About Portainer </h2><p data-renderer-start-pos=\"680\">Portainer is the worlds’\
|
||||||
|
\ most popular universal container management platform with more than 650,000 active monthly users.\
|
||||||
|
\ Portainer can be used to manage Docker Standalone, Kubernetes and Docker Swarm environments\
|
||||||
|
\ through a single common interface. It includes a simple GitOps automation engine and a Kube\
|
||||||
|
\ API. </p><p data-renderer-start-pos=\"1006\">Portainer Business Edition is our fully supported\
|
||||||
|
\ commercial grade product for business-wide use. It includes all the functionality that businesses\
|
||||||
|
\ need to manage containers at scale. Visit <a class=\"sc-jKJlTe dPfAtb\" href=\"http://portainer.io/\"\
|
||||||
|
\ title=\"http://Portainer.io\" data-renderer-mark=\"true\">Portainer.io</a> to learn more about\
|
||||||
|
\ Portainer Business and <a class=\"sc-jKJlTe dPfAtb\" href=\"http://portainer.io/take-3?utm_campaign=DockerCon&utm_source=Docker%20Desktop\"\
|
||||||
|
\ title=\"http://portainer.io/take-3?utm_campaign=DockerCon&utm_source=Docker%20Desktop\"\
|
||||||
|
\ data-renderer-mark=\"true\">get 3 free nodes.</a></p>"
|
||||||
|
com.docker.extension.publisher-url: "https://www.portainer.io"
|
||||||
|
com.docker.extension.screenshots: "[{\"alt\": \"screenshot one\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-1.png\"\
|
||||||
|
},{\"alt\": \"screenshot two\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-2.png\"\
|
||||||
|
},{\"alt\": \"screenshot three\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-3.png\"\
|
||||||
|
},{\"alt\": \"screenshot four\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-4.png\"\
|
||||||
|
},{\"alt\": \"screenshot five\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-5.png\"\
|
||||||
|
},{\"alt\": \"screenshot six\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-6.png\"\
|
||||||
|
},{\"alt\": \"screenshot seven\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-7.png\"\
|
||||||
|
},{\"alt\": \"screenshot eight\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-8.png\"\
|
||||||
|
},{\"alt\": \"screenshot nine\", \"url\": \"https://portainer-io-assets.sfo2.digitaloceanspaces.com/screenshots/docker-extension-9.png\"\
|
||||||
|
}]"
|
||||||
|
io.portainer.server: "true"
|
||||||
|
org.opencontainers.image.description: "Docker container management made simple, with the world’s\
|
||||||
|
\ most popular GUI-based container management platform."
|
||||||
|
org.opencontainers.image.title: "Portainer"
|
||||||
|
org.opencontainers.image.vendor: "Portainer.io"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
network_mode: "bridge"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "8000:8000/tcp"
|
||||||
|
- "9000:9000/tcp"
|
||||||
|
|
||||||
|
restart: "always"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/mnt/data/docker_vol/portainer:/data"
|
||||||
|
- "/var/run/docker.sock:/var/run/docker.sock"
|
||||||
|
|
||||||
|
working_dir: "/"
|
||||||
|
|
||||||
|
version: "3.6"
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
networks:
|
||||||
|
rincoin_default:
|
||||||
|
external: true
|
||||||
|
name: "rincoin_default"
|
||||||
|
|
||||||
|
services:
|
||||||
|
rincoin-node2:
|
||||||
|
|
||||||
|
command:
|
||||||
|
- "-datadir=/data"
|
||||||
|
- "-conf=/data/rincoin.conf"
|
||||||
|
- "-printtoconsole"
|
||||||
|
|
||||||
|
container_name: "rincoin-node2"
|
||||||
|
|
||||||
|
entrypoint:
|
||||||
|
- "/usr/local/bin/rincoind"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "DEBIAN_FRONTEND=noninteractive"
|
||||||
|
|
||||||
|
hostname: "9a6d58857cd0"
|
||||||
|
|
||||||
|
image: "rincoin-node:latest"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "c538f569d76e1edec24710e86694448f59d7f59ad1cd83a44d9aaa2ec32e89ca"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:d0934cced84238cb1b9e090a5b27561dc90355ec108571fc3a8ae687267fa087"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "rincoin"
|
||||||
|
com.docker.compose.project.config_files: "/data/compose/14/docker-compose.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/data/compose/14"
|
||||||
|
com.docker.compose.replace: "6b21373b29365c8eab15f7f7450f47ff5e18984c9c5e11ff2ab468a2e6eda26b"
|
||||||
|
com.docker.compose.service: "rincoin-node"
|
||||||
|
com.docker.compose.version: ""
|
||||||
|
org.opencontainers.image.ref.name: "ubuntu"
|
||||||
|
org.opencontainers.image.version: "22.04"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "rincoin_default"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "9555:9555/tcp"
|
||||||
|
- "9556:9556/tcp"
|
||||||
|
|
||||||
|
restart: "unless-stopped"
|
||||||
|
|
||||||
|
user: "rin"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/mnt/data/docker_vol/rincoin/rincoin-node/data:/data"
|
||||||
|
- "/mnt/data/docker_vol/rincoin/rincoin-node/rincoin.conf:/data/rincoin.conf:ro"
|
||||||
|
|
||||||
|
working_dir: "/opt"
|
||||||
|
|
||||||
|
version: "3.6"
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
networks:
|
||||||
|
windows_default:
|
||||||
|
external: true
|
||||||
|
name: "windows_default"
|
||||||
|
|
||||||
|
services:
|
||||||
|
windows:
|
||||||
|
|
||||||
|
container_name: "windows"
|
||||||
|
|
||||||
|
devices:
|
||||||
|
- "/dev/kvm:/dev/kvm"
|
||||||
|
- "/dev/net/tun:/dev/net/tun"
|
||||||
|
- "/dev/nvme0n1p8:/disk2"
|
||||||
|
|
||||||
|
entrypoint:
|
||||||
|
- "/usr/bin/tini"
|
||||||
|
- "-s"
|
||||||
|
- "/run/entry.sh"
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- "RAM_SIZE=8G"
|
||||||
|
- "CPU_CORES=4"
|
||||||
|
- "VERSION=11"
|
||||||
|
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||||
|
- "DISK_SIZE=64G"
|
||||||
|
|
||||||
|
hostname: "b54f26e81e8a"
|
||||||
|
|
||||||
|
image: "dockurr/windows"
|
||||||
|
|
||||||
|
ipc: "private"
|
||||||
|
|
||||||
|
labels:
|
||||||
|
com.docker.compose.config-hash: "946a6f405cd99fc70b051d30032fd67cc15601412a5edd38ae1960a013099d20"
|
||||||
|
com.docker.compose.container-number: "1"
|
||||||
|
com.docker.compose.depends_on: ""
|
||||||
|
com.docker.compose.image: "sha256:df07df026e7d52a3416b557e9e40a829982746ef3d2924e8e5b92787c2e5f269"
|
||||||
|
com.docker.compose.oneoff: "False"
|
||||||
|
com.docker.compose.project: "windows"
|
||||||
|
com.docker.compose.project.config_files: "/data/compose/3/docker-compose.yml"
|
||||||
|
com.docker.compose.project.working_dir: "/data/compose/3"
|
||||||
|
com.docker.compose.service: "windows"
|
||||||
|
com.docker.compose.version: ""
|
||||||
|
org.opencontainers.image.created: "2025-05-06T04:50:51.502Z"
|
||||||
|
org.opencontainers.image.description: "Windows inside a Docker container."
|
||||||
|
org.opencontainers.image.licenses: "MIT"
|
||||||
|
org.opencontainers.image.revision: "868c8af289a1012cd7c8bf2c9a2bba298eeb8dee"
|
||||||
|
org.opencontainers.image.source: "https://github.com/dockur/windows"
|
||||||
|
org.opencontainers.image.title: "Windows"
|
||||||
|
org.opencontainers.image.url: "https://github.com/dockur/windows"
|
||||||
|
org.opencontainers.image.version: "4.35"
|
||||||
|
|
||||||
|
logging:
|
||||||
|
driver: "json-file"
|
||||||
|
options: {}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
- "windows_default"
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- "1433:1433/tcp"
|
||||||
|
- "3389:3389/tcp"
|
||||||
|
- "3389:3389/udp"
|
||||||
|
- "8006:8006/tcp"
|
||||||
|
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
restart: "always"
|
||||||
|
|
||||||
|
security_opt:
|
||||||
|
- "label=disable"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/mnt/data/docker_vol/windows:/storage"
|
||||||
|
- "/mnt/shared:/data"
|
||||||
|
|
||||||
|
working_dir: "/"
|
||||||
|
|
||||||
|
version: "3.6"
|
||||||
Binary file not shown.
Binary file not shown.
88
portainer-compose-stacks/BACKUPS/BACKUP-SUMMARY.md
Normal file
88
portainer-compose-stacks/BACKUPS/BACKUP-SUMMARY.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# Portainer Reset & Backup Summary
|
||||||
|
|
||||||
|
**Date:** November 18, 2025, 13:37
|
||||||
|
**Issue:** Portainer environments showing as "unreachable" due to stale configurations from previous multi-instance setup
|
||||||
|
|
||||||
|
## Actions Taken
|
||||||
|
|
||||||
|
### 1. Complete Backup Created ✓
|
||||||
|
Location: `/mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/BACKUPS/20251118-133605/`
|
||||||
|
|
||||||
|
**Backup Contents:**
|
||||||
|
- ✓ Portainer database (portainer-database-backup.db) - 512KB
|
||||||
|
- ✓ Portainer automatic backup (portainer-automatic-backup.db.bak) - 512KB
|
||||||
|
- ✓ All containers combined compose file (all-containers-compose.yml) - 17KB
|
||||||
|
- ✓ Individual container compose files (7 files):
|
||||||
|
- container-portainer.yml
|
||||||
|
- container-windows.yml
|
||||||
|
- container-rincoin-node2.yml
|
||||||
|
- container-amd-strix-halo-llama-rocm.yml
|
||||||
|
- container-amd-strix-halo-llama-vulkan-radv.yml
|
||||||
|
- container-amd-strix-halo-llama-vulkan-amdvlk.yml
|
||||||
|
- container-docker-model-runner.yml
|
||||||
|
|
||||||
|
### 2. Portainer Database Reset ✓
|
||||||
|
- Old database: 512KB (contained stale environment 3)
|
||||||
|
- New database: 32KB (fresh installation)
|
||||||
|
- New instance ID: 1b059c79-d81d-4044-9050-4d90ea85a5ec
|
||||||
|
- Status: Running and responding correctly
|
||||||
|
|
||||||
|
### 3. Tools Installed ✓
|
||||||
|
- docker-autocompose from https://github.com/Red5d/docker-autocompose
|
||||||
|
- Dependencies: docker, pyaml Python packages
|
||||||
|
|
||||||
|
## Next Steps for User
|
||||||
|
|
||||||
|
### 1. Initial Portainer Setup
|
||||||
|
Visit http://localhost:9000 and complete the initial setup:
|
||||||
|
- Create new admin username and password
|
||||||
|
- This is required since the database was reset
|
||||||
|
|
||||||
|
### 2. Add Docker Environment
|
||||||
|
After login, add your local Docker environment:
|
||||||
|
- Click "Get Started" or "Add Environment"
|
||||||
|
- Select "Docker" as environment type
|
||||||
|
- Choose "Socket" connection method
|
||||||
|
- Socket path: `/var/run/docker.sock`
|
||||||
|
- Name it "nuc" or "localhost"
|
||||||
|
|
||||||
|
### 3. Verify All Containers Are Visible
|
||||||
|
All your existing containers should appear automatically:
|
||||||
|
- portainer
|
||||||
|
- windows
|
||||||
|
- rincoin-node2
|
||||||
|
- amd-strix-halo-llama-rocm
|
||||||
|
- amd-strix-halo-llama-vulkan-radv
|
||||||
|
- amd-strix-halo-llama-vulkan-amdvlk
|
||||||
|
- docker-model-runner
|
||||||
|
|
||||||
|
### 4. Optional: Export Portainer Configuration
|
||||||
|
From the Portainer UI:
|
||||||
|
- Settings → Backup
|
||||||
|
- Download backup for safekeeping
|
||||||
|
|
||||||
|
## Restore Instructions (If Needed)
|
||||||
|
|
||||||
|
### To restore old Portainer database:
|
||||||
|
```bash
|
||||||
|
docker stop portainer
|
||||||
|
docker run --rm -v /mnt/data/docker_vol/portainer:/data \
|
||||||
|
-v /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/BACKUPS/20251118-133605:/backup \
|
||||||
|
alpine cp /backup/portainer-database-backup.db /data/portainer.db
|
||||||
|
docker start portainer
|
||||||
|
```
|
||||||
|
|
||||||
|
### To restore containers from compose files:
|
||||||
|
```bash
|
||||||
|
cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/BACKUPS/20251118-133605
|
||||||
|
|
||||||
|
# Restore specific container
|
||||||
|
docker-compose -f container-NAME.yml up -d
|
||||||
|
|
||||||
|
# Or restore all containers
|
||||||
|
docker-compose -f all-containers-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Problem Resolution
|
||||||
|
The issue was caused by stale environment configurations (specifically "environment 3") remaining in the Portainer database even after removal from the UI. These corrupted entries caused Portainer to crash when attempting to connect to non-existent environments. A fresh database resolves this completely.
|
||||||
|
|
||||||
Binary file not shown.
123
portainer-compose-stacks/EDGE-AGENT-SETUP.md
Normal file
123
portainer-compose-stacks/EDGE-AGENT-SETUP.md
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
# Portainer Edge Agent Setup Guide
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
Edge Agent allows you to connect Docker environments to Portainer over the network instead of using local socket connection. This is useful when having socket connection issues.
|
||||||
|
|
||||||
|
Reference: https://downloads.portainer.io/edge_agent_guide.pdf
|
||||||
|
|
||||||
|
## Step 1: Access Portainer UI
|
||||||
|
|
||||||
|
Access your Portainer instance:
|
||||||
|
- HTTP: http://localhost:9000
|
||||||
|
- HTTPS: https://localhost:9443
|
||||||
|
|
||||||
|
Complete the initial setup if you haven't already (create admin user).
|
||||||
|
|
||||||
|
## Step 2: Add Edge Environment in Portainer UI
|
||||||
|
|
||||||
|
1. **Log into Portainer**
|
||||||
|
|
||||||
|
2. **Go to Environments** (left sidebar)
|
||||||
|
|
||||||
|
3. **Click "Add environment"**
|
||||||
|
|
||||||
|
4. **Select "Edge Agent Standard"**
|
||||||
|
- Choose "Docker Standalone"
|
||||||
|
- Name: `nuc-edge` (or your preferred name)
|
||||||
|
|
||||||
|
5. **Copy the deployment command** shown in the UI
|
||||||
|
- It will include your `EDGE_ID` and `EDGE_KEY`
|
||||||
|
- The command looks like:
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
|
||||||
|
-v /:/host \
|
||||||
|
-v portainer_agent_data:/data \
|
||||||
|
--restart always \
|
||||||
|
-e EDGE=1 \
|
||||||
|
-e EDGE_ID=xxx \
|
||||||
|
-e EDGE_KEY=xxx \
|
||||||
|
-e CAP_HOST_MANAGEMENT=1 \
|
||||||
|
-e EDGE_INSECURE_POLL=1 \
|
||||||
|
--name portainer_edge_agent \
|
||||||
|
portainer/agent:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Extract EDGE_ID and EDGE_KEY** from the command
|
||||||
|
|
||||||
|
## Step 3: Configure Edge Agent
|
||||||
|
|
||||||
|
### Option A: Using docker-compose (Recommended)
|
||||||
|
|
||||||
|
1. **Copy the example env file:**
|
||||||
|
```bash
|
||||||
|
cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks
|
||||||
|
cp .env.edge-agent.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Edit .env file** with your EDGE_ID and EDGE_KEY:
|
||||||
|
```bash
|
||||||
|
nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Start the Edge Agent:**
|
||||||
|
```bash
|
||||||
|
docker-compose -f portainer-edge-agent.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Option B: Using the Docker command directly
|
||||||
|
|
||||||
|
Just run the command copied from Portainer UI in Step 2.
|
||||||
|
|
||||||
|
## Step 4: Verify Connection
|
||||||
|
|
||||||
|
1. Go back to Portainer UI → **Environments**
|
||||||
|
|
||||||
|
2. Your edge environment should show as **"Connected"** (green)
|
||||||
|
|
||||||
|
3. Click on the environment to manage your Docker containers
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Edge Agent not connecting:
|
||||||
|
|
||||||
|
1. **Check logs:**
|
||||||
|
```bash
|
||||||
|
docker logs portainer-edge-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Verify Portainer tunnel is accessible:**
|
||||||
|
```bash
|
||||||
|
curl http://localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Check if agent container is running:**
|
||||||
|
```bash
|
||||||
|
docker ps | grep edge-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Ensure firewall allows port 8000** (for Edge polling)
|
||||||
|
|
||||||
|
### Environment shows as "Down":
|
||||||
|
|
||||||
|
- Wait 30-60 seconds for initial connection
|
||||||
|
- Check that EDGE_ID and EDGE_KEY are correct
|
||||||
|
- Restart the agent: `docker restart portainer-edge-agent`
|
||||||
|
|
||||||
|
## Cleanup
|
||||||
|
|
||||||
|
To remove Edge Agent:
|
||||||
|
```bash
|
||||||
|
docker-compose -f portainer-edge-agent.yml down -v
|
||||||
|
# or
|
||||||
|
docker stop portainer-edge-agent && docker rm portainer-edge-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Edge Agent polls Portainer server every 5 seconds by default
|
||||||
|
- `EDGE_INSECURE_POLL=1` allows connection without TLS (for local testing)
|
||||||
|
- Port 8000 is used for the Edge tunnel communication
|
||||||
|
- Port 9001 is the agent API port (optional, for direct access)
|
||||||
|
|
||||||
41
portainer-compose-stacks/nextcloud-aio.yml
Normal file
41
portainer-compose-stacks/nextcloud-aio.yml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
nextcloud-aio-mastercontainer:
|
||||||
|
container_name: nextcloud-aio-mastercontainer
|
||||||
|
image: nextcloud/all-in-one:latest
|
||||||
|
restart: always
|
||||||
|
#ports:
|
||||||
|
# - "82:80"
|
||||||
|
# - "8080:8080"
|
||||||
|
#- "8444:8444"
|
||||||
|
volumes:
|
||||||
|
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
- /mnt/storage/containers/nextcloud_aio:/mnt/host
|
||||||
|
environment:
|
||||||
|
- NEXTCLOUD_DATADIR=/mnt/storage/containers/nextcloud_data
|
||||||
|
- APACHE_PORT=8444
|
||||||
|
- APACHE_IP_BINDING=0.0.0.0
|
||||||
|
- APACHE_ADDITIONAL_NETWORK=proxy_proxy_default
|
||||||
|
- SKIP_DOMAIN_VALIDATION=true
|
||||||
|
networks:
|
||||||
|
- nextcloud_network
|
||||||
|
- proxy_proxy_default
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
nextcloud_aio_mastercontainer:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: /mnt/storage/containers/nextcloud_config
|
||||||
|
|
||||||
|
networks:
|
||||||
|
nextcloud_network:
|
||||||
|
driver: bridge
|
||||||
|
proxy_proxy_default:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
|
||||||
|
# https://animalabs.ai/
|
||||||
27
portainer-compose-stacks/portainer-edge-agent.yml
Normal file
27
portainer-compose-stacks/portainer-edge-agent.yml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
version: '3.2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
portainer-edge-agent:
|
||||||
|
image: portainer/agent:latest
|
||||||
|
container_name: portainer-edge-agent
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
- /var/lib/docker/volumes:/var/lib/docker/volumes
|
||||||
|
- /:/host
|
||||||
|
- portainer_agent_data:/data
|
||||||
|
environment:
|
||||||
|
# You need to get these values from Portainer UI after adding an Edge environment
|
||||||
|
# EDGE_ID and EDGE_KEY will be provided when you create the environment
|
||||||
|
- EDGE=1
|
||||||
|
- EDGE_ID=${EDGE_ID}
|
||||||
|
- EDGE_KEY=${EDGE_KEY}
|
||||||
|
- EDGE_INSECURE_POLL=1
|
||||||
|
# Portainer server URL - adjust to your Portainer server address
|
||||||
|
- PORTAINER_TUNNEL_ADDR=localhost:8000
|
||||||
|
ports:
|
||||||
|
- "9001:9001"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
portainer_agent_data:
|
||||||
|
|
||||||
24
portainer-compose-stacks/rincoin/docker-compose.yml
Normal file
24
portainer-compose-stacks/rincoin/docker-compose.yml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
rincoin-node:
|
||||||
|
container_name: rincoin-node2
|
||||||
|
image: rincoin-node:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "9555:9555"
|
||||||
|
- "9556:9556"
|
||||||
|
volumes:
|
||||||
|
- /mnt/data/docker_vol/rincoin/rincoin-node/data:/data
|
||||||
|
- /mnt/data/docker_vol/rincoin/rincoin-node/rincoin.conf:/data/rincoin.conf:ro
|
||||||
|
command:
|
||||||
|
- -datadir=/data
|
||||||
|
- -conf=/data/rincoin.conf
|
||||||
|
- -printtoconsole
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
214
portainer-compose-stacks/windows/GPU-PASSTHROUGH.md
Normal file
214
portainer-compose-stacks/windows/GPU-PASSTHROUGH.md
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
# AMD Strix Halo iGPU Passthrough to Windows Container
|
||||||
|
|
||||||
|
This guide configures PCI passthrough for the AMD Strix Halo integrated GPU to the Windows Docker container, enabling GPU-accelerated applications.
|
||||||
|
|
||||||
|
## Important Note: Manual Binding Approach
|
||||||
|
|
||||||
|
This setup uses **manual GPU binding** to avoid host display issues. The GPU remains available to the host by default, and you manually bind it to VFIO only when starting the Windows container. This prevents system freezing at boot on newer kernels.
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
The Windows container was showing "Red Hat VirtIO GPU DOD Controller" instead of the AMD GPU because:
|
||||||
|
- IOMMU was disabled (`amd_iommu=off`)
|
||||||
|
- GPU was not passed through at PCI level
|
||||||
|
- Only `/dev/dri` devices were exposed (insufficient for Windows)
|
||||||
|
- Early VFIO binding caused host display to freeze
|
||||||
|
|
||||||
|
## Solution Overview
|
||||||
|
|
||||||
|
1. Enable AMD IOMMU in kernel boot parameters
|
||||||
|
2. Bind GPU and audio devices to `vfio-pci` driver
|
||||||
|
3. Configure QEMU to pass through PCI devices
|
||||||
|
4. Restart container and install AMD drivers in Windows
|
||||||
|
|
||||||
|
## Hardware Details
|
||||||
|
|
||||||
|
- **GPU**: AMD Strix Halo iGPU (PCI: c5:00.0, ID: 1002:1586)
|
||||||
|
- **Audio**: HDMI Audio Controller (PCI: c5:00.1, ID: 1002:1640)
|
||||||
|
|
||||||
|
## Setup Instructions
|
||||||
|
|
||||||
|
### Step 1: Fix GRUB Configuration (If You Had Freezing Issues)
|
||||||
|
|
||||||
|
If your system was freezing at login on newer kernels:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/windows
|
||||||
|
sudo ./fix-grub-remove-vfio-ids.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This removes early VFIO binding that causes the host to lose GPU access.
|
||||||
|
|
||||||
|
### Step 2: Update GRUB and Reboot
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo update-grub
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
**IMPORTANT**: After reboot, IOMMU will be enabled but GPU remains available to host.
|
||||||
|
|
||||||
|
### Step 3: Before Starting Windows Container - Bind GPU
|
||||||
|
|
||||||
|
Every time you want to use GPU passthrough, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/windows
|
||||||
|
sudo ./bind-gpu-to-vfio.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This temporarily binds the GPU to VFIO (host display will stop working).
|
||||||
|
|
||||||
|
### Step 4: Start Windows Container
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/windows
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 5: When Done - Restore GPU to Host
|
||||||
|
|
||||||
|
After stopping the Windows container, restore GPU to host:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/windows
|
||||||
|
sudo ./unbind-gpu-from-vfio.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This rebinds the GPU to amdgpu driver for host use.
|
||||||
|
|
||||||
|
### Step 6: Install AMD Drivers in Windows
|
||||||
|
|
||||||
|
1. Connect to Windows via RDP: `localhost:3389`
|
||||||
|
2. Open Device Manager
|
||||||
|
3. You should see "AMD Display Adapter" (may show with warning)
|
||||||
|
4. Download AMD Radeon drivers for Windows 11
|
||||||
|
5. Install the drivers
|
||||||
|
6. Reboot Windows
|
||||||
|
7. Verify GPU in Task Manager → Performance → GPU
|
||||||
|
|
||||||
|
## Docker Compose Configuration
|
||||||
|
|
||||||
|
The configuration includes:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
GPU: "Y"
|
||||||
|
ARGUMENTS: "-device vfio-pci,host=c5:00.0,addr=0x02,multifunction=on -device vfio-pci,host=c5:00.1,addr=0x02.1"
|
||||||
|
devices:
|
||||||
|
- /dev/vfio/vfio
|
||||||
|
```
|
||||||
|
|
||||||
|
This passes through:
|
||||||
|
- **c5:00.0**: AMD GPU
|
||||||
|
- **c5:00.1**: HDMI Audio
|
||||||
|
- **addr=0x02**: Virtual PCI slot in guest
|
||||||
|
- **multifunction=on**: Allows multiple functions on same slot
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### GPU still shows VirtIO after reboot
|
||||||
|
|
||||||
|
Check if GPU is bound to vfio-pci:
|
||||||
|
```bash
|
||||||
|
lspci -nnk -s c5:00.0
|
||||||
|
```
|
||||||
|
|
||||||
|
Should show: `Kernel driver in use: vfio-pci`
|
||||||
|
|
||||||
|
If not, manually bind:
|
||||||
|
```bash
|
||||||
|
echo "0000:c5:00.0" | sudo tee /sys/bus/pci/drivers/amdgpu/unbind
|
||||||
|
echo "1002 1586" | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id
|
||||||
|
```
|
||||||
|
|
||||||
|
### IOMMU not enabled after reboot
|
||||||
|
|
||||||
|
Check kernel parameters:
|
||||||
|
```bash
|
||||||
|
cat /proc/cmdline | grep iommu
|
||||||
|
```
|
||||||
|
|
||||||
|
Should show: `amd_iommu=on iommu=pt`
|
||||||
|
|
||||||
|
If not present:
|
||||||
|
```bash
|
||||||
|
sudo nano /etc/default/grub
|
||||||
|
# Add to GRUB_CMDLINE_LINUX_DEFAULT: amd_iommu=on iommu=pt
|
||||||
|
sudo update-grub
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
### Container fails to start
|
||||||
|
|
||||||
|
Check logs:
|
||||||
|
```bash
|
||||||
|
docker logs windows
|
||||||
|
```
|
||||||
|
|
||||||
|
Common issues:
|
||||||
|
- VFIO device not found: Run verification script
|
||||||
|
- Permission denied: Ensure container is `privileged: true`
|
||||||
|
- Device busy: Another driver may be using the GPU
|
||||||
|
|
||||||
|
### GPU not detected in Windows
|
||||||
|
|
||||||
|
1. Check Device Manager for unknown devices
|
||||||
|
2. Try installing AMD Chipset drivers first
|
||||||
|
3. Use AMD Auto-Detect tool for driver installation
|
||||||
|
4. Check Windows Event Viewer for driver errors
|
||||||
|
|
||||||
|
## Performance Notes
|
||||||
|
|
||||||
|
- **Full GPU acceleration**: Direct PCI passthrough provides near-native performance
|
||||||
|
- **VRAM**: Windows will see the full iGPU VRAM allocation
|
||||||
|
- **Display output**: Use RDP/VNC (no physical display from container)
|
||||||
|
- **3D acceleration**: Fully supported (DirectX, OpenGL, Vulkan)
|
||||||
|
|
||||||
|
## Limitations
|
||||||
|
|
||||||
|
- Host cannot use the iGPU while passed through to the container
|
||||||
|
- Physical display outputs from the GPU won't work (headless only)
|
||||||
|
- USB devices may need separate passthrough configuration
|
||||||
|
- Some GPU features may require CPU pinning for best performance
|
||||||
|
|
||||||
|
## Files Modified
|
||||||
|
|
||||||
|
- `/etc/default/grub` - IOMMU kernel parameters
|
||||||
|
- `/etc/modprobe.d/vfio.conf` - VFIO driver binding
|
||||||
|
- `/etc/initramfs-tools/modules` - VFIO modules in initramfs
|
||||||
|
- `docker-compose.yml` - PCI passthrough arguments
|
||||||
|
|
||||||
|
## Reverting Changes
|
||||||
|
|
||||||
|
To restore GPU to host:
|
||||||
|
|
||||||
|
1. Remove VFIO configuration:
|
||||||
|
```bash
|
||||||
|
sudo rm /etc/modprobe.d/vfio.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Edit GRUB to remove `vfio-pci.ids=...`:
|
||||||
|
```bash
|
||||||
|
sudo nano /etc/default/grub
|
||||||
|
sudo update-grub
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Update initramfs and reboot:
|
||||||
|
```bash
|
||||||
|
sudo update-initramfs -u
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [dockurr/windows](https://github.com/dockur/windows) - Windows container image
|
||||||
|
- [AMD GPU Passthrough Guide](https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF)
|
||||||
|
- [VFIO Documentation](https://www.kernel.org/doc/html/latest/driver-api/vfio.html)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
185
portainer-compose-stacks/windows/GPU-SHARING-EXPLAINED.md
Normal file
185
portainer-compose-stacks/windows/GPU-SHARING-EXPLAINED.md
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
# GPU Sharing: Windows vs Linux Explained
|
||||||
|
|
||||||
|
## Can You Share GPU Between Host and Container?
|
||||||
|
|
||||||
|
**Short Answer**: No, not with VFIO PCI passthrough on Linux.
|
||||||
|
|
||||||
|
## Why Windows Can Do It (Hyper-V GPU-PV)
|
||||||
|
|
||||||
|
### Windows Hyper-V GPU Paravirtualization
|
||||||
|
- **Technology**: Microsoft's proprietary GPU virtualization
|
||||||
|
- **How it works**: GPU stays with Windows host, VMs get "virtual GPU slices"
|
||||||
|
- **Requirements**:
|
||||||
|
- Windows host (Server or Pro with Hyper-V)
|
||||||
|
- Windows guests
|
||||||
|
- Specific GPU support (mostly newer Intel/AMD/NVIDIA)
|
||||||
|
- **Benefits**:
|
||||||
|
- ✓ Multiple VMs share one GPU
|
||||||
|
- ✓ Host keeps display working
|
||||||
|
- ✓ Decent performance for most workloads
|
||||||
|
- **Limitations**:
|
||||||
|
- Windows only (host + guest)
|
||||||
|
- Not full GPU performance
|
||||||
|
- Limited GPU features
|
||||||
|
|
||||||
|
## Why Linux QEMU/VFIO Can't Share
|
||||||
|
|
||||||
|
### VFIO PCI Passthrough
|
||||||
|
- **Technology**: Hardware-level device passthrough (Linux kernel feature)
|
||||||
|
- **How it works**: Entire GPU is "unplugged" from host and given to guest
|
||||||
|
- **Benefits**:
|
||||||
|
- ✓ Near-native performance
|
||||||
|
- ✓ Full GPU features
|
||||||
|
- ✓ Works cross-platform (any guest OS)
|
||||||
|
- **Limitations**:
|
||||||
|
- ✗ Exclusive access only (either host OR guest)
|
||||||
|
- ✗ Host loses display when GPU passed through
|
||||||
|
- ✗ Cannot share between multiple VMs
|
||||||
|
|
||||||
|
## Your Options for AMD Strix Halo iGPU
|
||||||
|
|
||||||
|
### Option 1: Shared Software Rendering (Recommended)
|
||||||
|
**Configuration**: No GPU passthrough
|
||||||
|
|
||||||
|
**How it works**:
|
||||||
|
- Host uses GPU normally (amdgpu driver)
|
||||||
|
- Windows container gets VirtIO virtual GPU
|
||||||
|
- Both host and container work simultaneously
|
||||||
|
- Software rendering in container (accelerated by host GPU)
|
||||||
|
|
||||||
|
**Pros**:
|
||||||
|
- ✓ Host display works
|
||||||
|
- ✓ Container auto-starts
|
||||||
|
- ✓ Both usable at same time
|
||||||
|
- ✓ Simple, no binding scripts
|
||||||
|
|
||||||
|
**Cons**:
|
||||||
|
- ✗ No native GPU in Windows
|
||||||
|
- ✗ Limited GPU performance in Windows
|
||||||
|
- ✗ No GPU-Z, no AMD drivers in Windows
|
||||||
|
|
||||||
|
**Best for**:
|
||||||
|
- General Windows usage
|
||||||
|
- When you need host display
|
||||||
|
- Development/testing
|
||||||
|
- Light workloads in Windows
|
||||||
|
|
||||||
|
**Current docker-compose setup**: This is now configured (I just updated it)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Option 2: Exclusive GPU Passthrough
|
||||||
|
**Configuration**: VFIO PCI passthrough (manual binding)
|
||||||
|
|
||||||
|
**How it works**:
|
||||||
|
1. Bind GPU to VFIO (host display freezes)
|
||||||
|
2. Start Windows container
|
||||||
|
3. Windows gets real AMD GPU
|
||||||
|
4. Stop container and unbind to restore host
|
||||||
|
|
||||||
|
**Pros**:
|
||||||
|
- ✓ Full AMD GPU in Windows
|
||||||
|
- ✓ Native performance
|
||||||
|
- ✓ GPU-accelerated apps work
|
||||||
|
- ✓ AMD drivers install
|
||||||
|
|
||||||
|
**Cons**:
|
||||||
|
- ✗ Host display frozen (no GUI)
|
||||||
|
- ✗ Exclusive - can't use both
|
||||||
|
- ✗ Manual binding required
|
||||||
|
- ✗ Access host via SSH only
|
||||||
|
|
||||||
|
**Best for**:
|
||||||
|
- GPU-intensive Windows apps
|
||||||
|
- Machine learning in Windows
|
||||||
|
- Gaming (if that's possible)
|
||||||
|
- When maximum GPU performance needed
|
||||||
|
|
||||||
|
**Workflow**:
|
||||||
|
```bash
|
||||||
|
# Start Windows with GPU
|
||||||
|
sudo ./bind-gpu-to-vfio.sh # Host display goes black!
|
||||||
|
docker compose -f docker-compose.gpu-passthrough.yml up -d
|
||||||
|
|
||||||
|
# Stop and restore
|
||||||
|
docker compose -f docker-compose.gpu-passthrough.yml down
|
||||||
|
sudo ./unbind-gpu-from-vfio.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Technologies That DON'T Work Here
|
||||||
|
|
||||||
|
### SR-IOV (Single Root I/O Virtualization)
|
||||||
|
- Requires GPU hardware support
|
||||||
|
- Consumer GPUs (like Strix Halo) don't have it
|
||||||
|
- Mostly enterprise data center GPUs
|
||||||
|
|
||||||
|
### AMD MxGPU / NVIDIA vGPU
|
||||||
|
- Enterprise GPU virtualization
|
||||||
|
- Requires special drivers + licensed enterprise GPUs
|
||||||
|
- Not available for consumer iGPUs
|
||||||
|
|
||||||
|
### GVT-g (Intel GPU Virtualization)
|
||||||
|
- Intel only
|
||||||
|
- Not available for AMD GPUs
|
||||||
|
|
||||||
|
### Looking Glass
|
||||||
|
- Allows viewing GPU output from guest
|
||||||
|
- Still exclusive passthrough (guest owns GPU)
|
||||||
|
- Just a viewer, not sharing
|
||||||
|
|
||||||
|
## What About DRI/DRM Passthrough?
|
||||||
|
|
||||||
|
You might think: "Can we pass `/dev/dri` to share?"
|
||||||
|
|
||||||
|
**Tried this already** - it doesn't work for Windows because:
|
||||||
|
- Windows needs PCI-level GPU access
|
||||||
|
- `/dev/dri` is Linux-specific (won't work in Windows)
|
||||||
|
- Windows drivers expect real PCI GPU device
|
||||||
|
|
||||||
|
## Comparison Table
|
||||||
|
|
||||||
|
| Feature | Shared (VirtIO) | Exclusive (VFIO) | Windows Hyper-V GPU-PV |
|
||||||
|
|---------|----------------|------------------|------------------------|
|
||||||
|
| Host display works | ✓ | ✗ | ✓ |
|
||||||
|
| Container auto-start | ✓ | ✗ | ✓ |
|
||||||
|
| Both usable together | ✓ | ✗ | ✓ |
|
||||||
|
| Native GPU in Windows | ✗ | ✓ | ~ (virtual) |
|
||||||
|
| GPU performance | Low | High | Medium |
|
||||||
|
| Setup complexity | Easy | Complex | Medium |
|
||||||
|
| Requires manual binding | ✗ | ✓ | ✗ |
|
||||||
|
|
||||||
|
## Recommendation
|
||||||
|
|
||||||
|
**For your use case**, I recommend:
|
||||||
|
|
||||||
|
### Start with Option 1 (Shared - No Passthrough)
|
||||||
|
- Container works
|
||||||
|
- Host works
|
||||||
|
- Both at same time
|
||||||
|
- Simple setup
|
||||||
|
|
||||||
|
**If Windows GPU performance is too slow**, then consider:
|
||||||
|
- Adding a second GPU to host (dedicate one to passthrough)
|
||||||
|
- Running Windows on bare metal for GPU workloads
|
||||||
|
- Using cloud GPU instances for heavy GPU tasks
|
||||||
|
|
||||||
|
## Current Configuration
|
||||||
|
|
||||||
|
I've just updated your `docker-compose.yml` to **Option 1 (Shared)**:
|
||||||
|
- Removed GPU passthrough
|
||||||
|
- Removed VFIO devices
|
||||||
|
- Container can auto-start
|
||||||
|
- Host display continues working
|
||||||
|
|
||||||
|
**Want to test it?**
|
||||||
|
```bash
|
||||||
|
cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/windows
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Windows will start with VirtIO display. Both host and container will work simultaneously.
|
||||||
|
|
||||||
|
**Need GPU passthrough later?** I can create a separate docker-compose file for that use case.
|
||||||
|
|
||||||
79
portainer-compose-stacks/windows/bind-gpu-to-vfio.sh
Normal file
79
portainer-compose-stacks/windows/bind-gpu-to-vfio.sh
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Manually bind the AMD GPU to VFIO for Windows container passthrough
|
||||||
|
# Run this BEFORE starting the Windows container
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "Please run as root: sudo $0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== Binding AMD GPU to VFIO ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
GPU_PCI="0000:c5:00.0"
|
||||||
|
AUDIO_PCI="0000:c5:00.1"
|
||||||
|
|
||||||
|
# Check if vfio-pci module is loaded
|
||||||
|
if ! lsmod | grep -q vfio_pci; then
|
||||||
|
echo "Loading vfio-pci module..."
|
||||||
|
modprobe vfio-pci
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Unbind GPU from amdgpu
|
||||||
|
echo "Unbinding GPU from amdgpu..."
|
||||||
|
if [ -e /sys/bus/pci/devices/$GPU_PCI/driver ]; then
|
||||||
|
echo "$GPU_PCI" > /sys/bus/pci/devices/$GPU_PCI/driver/unbind
|
||||||
|
echo "✓ GPU unbound from amdgpu"
|
||||||
|
else
|
||||||
|
echo "GPU not bound to any driver"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Unbind audio from snd_hda_intel
|
||||||
|
echo "Unbinding audio from snd_hda_intel..."
|
||||||
|
if [ -e /sys/bus/pci/devices/$AUDIO_PCI/driver ]; then
|
||||||
|
echo "$AUDIO_PCI" > /sys/bus/pci/devices/$AUDIO_PCI/driver/unbind
|
||||||
|
echo "✓ Audio unbound"
|
||||||
|
else
|
||||||
|
echo "Audio not bound to any driver"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Bind to vfio-pci
|
||||||
|
echo ""
|
||||||
|
echo "Binding to vfio-pci..."
|
||||||
|
echo "1002 1586" > /sys/bus/pci/drivers/vfio-pci/new_id 2>/dev/null || echo "GPU ID already registered"
|
||||||
|
echo "1002 1640" > /sys/bus/pci/drivers/vfio-pci/new_id 2>/dev/null || echo "Audio ID already registered"
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
GPU_DRIVER=$(lspci -nnk -s c5:00.0 | grep "Kernel driver in use" | awk '{print $5}')
|
||||||
|
AUDIO_DRIVER=$(lspci -nnk -s c5:00.1 | grep "Kernel driver in use" | awk '{print $5}')
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Status ==="
|
||||||
|
if [ "$GPU_DRIVER" = "vfio-pci" ]; then
|
||||||
|
echo "✓ GPU bound to vfio-pci"
|
||||||
|
else
|
||||||
|
echo "✗ GPU bound to: ${GPU_DRIVER:-none}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$AUDIO_DRIVER" = "vfio-pci" ]; then
|
||||||
|
echo "✓ Audio bound to vfio-pci"
|
||||||
|
else
|
||||||
|
echo "✗ Audio bound to: ${AUDIO_DRIVER:-none}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
if [ "$GPU_DRIVER" = "vfio-pci" ] && [ "$AUDIO_DRIVER" = "vfio-pci" ]; then
|
||||||
|
echo "✓ Ready for GPU passthrough!"
|
||||||
|
echo ""
|
||||||
|
echo "Now start the Windows container:"
|
||||||
|
echo " cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/windows"
|
||||||
|
echo " docker compose up -d"
|
||||||
|
else
|
||||||
|
echo "✗ Binding failed. Check errors above."
|
||||||
|
fi
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
services:
|
||||||
|
windows:
|
||||||
|
image: dockurr/windows # https://github.com/dockur/windows
|
||||||
|
container_name: windows-gpu
|
||||||
|
environment:
|
||||||
|
VERSION: "11"
|
||||||
|
RAM_SIZE: "8G"
|
||||||
|
CPU_CORES: "4"
|
||||||
|
GPU: "Y"
|
||||||
|
ARGUMENTS: "-device vfio-pci,host=c5:00.0,addr=0x05,multifunction=on,rombar=0 -device vfio-pci,host=c5:00.1,addr=0x05.1"
|
||||||
|
devices:
|
||||||
|
- /dev/kvm
|
||||||
|
- /dev/net/tun
|
||||||
|
- /dev/nvme0n1p8:/disk2
|
||||||
|
- /dev/vfio/vfio
|
||||||
|
- /dev/vfio/20
|
||||||
|
- /dev/vfio/21
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
privileged: true
|
||||||
|
ports:
|
||||||
|
- 445:445
|
||||||
|
- 1433:1433
|
||||||
|
- 8006:8006
|
||||||
|
- 3389:3389/tcp
|
||||||
|
- 3389:3389/udp
|
||||||
|
volumes:
|
||||||
|
# - /dev/nvme0n1p7:/disk1 # blind mount - not working for now
|
||||||
|
- /mnt/data/docker_vol/windows:/storage # storage (img file)location
|
||||||
|
- /mnt/shared:/data
|
||||||
|
restart: "no" # Manual start only - requires GPU binding first
|
||||||
|
stop_grace_period: 2m
|
||||||
|
|
||||||
32
portainer-compose-stacks/windows/docker-compose.yml
Normal file
32
portainer-compose-stacks/windows/docker-compose.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Windows Container - Shared Mode (No GPU Passthrough)
|
||||||
|
# Host and container can both run simultaneously
|
||||||
|
# Windows gets VirtIO display, host keeps AMD GPU
|
||||||
|
# For GPU passthrough, use: docker-compose.gpu-passthrough.yml
|
||||||
|
services:
|
||||||
|
windows:
|
||||||
|
image: dockurr/windows # https://github.com/dockur/windows
|
||||||
|
container_name: windows2
|
||||||
|
environment:
|
||||||
|
VERSION: "11"
|
||||||
|
RAM_SIZE: "8G"
|
||||||
|
CPU_CORES: "4"
|
||||||
|
devices:
|
||||||
|
- /dev/kvm
|
||||||
|
- /dev/net/tun
|
||||||
|
- /dev/nvme0n1p8:/disk2
|
||||||
|
cap_add:
|
||||||
|
- NET_ADMIN
|
||||||
|
privileged: true
|
||||||
|
ports:
|
||||||
|
- 445:445
|
||||||
|
- 1433:1433
|
||||||
|
- 8006:8006
|
||||||
|
- 3389:3389/tcp
|
||||||
|
- 3389:3389/udp
|
||||||
|
volumes:
|
||||||
|
# - /dev/nvme0n1p7:/disk1 # blind mount - not working for now
|
||||||
|
- /mnt/data/docker_vol/windows:/storage # storage (img file)location
|
||||||
|
- /mnt/shared:/data
|
||||||
|
restart: always
|
||||||
|
stop_grace_period: 2m
|
||||||
|
|
||||||
43
portainer-compose-stacks/windows/fix-grub-iommu.sh
Normal file
43
portainer-compose-stacks/windows/fix-grub-iommu.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Fix GRUB IOMMU conflict - remove amd_iommu=off that's blocking the passthrough
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "Please run as root: sudo $0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== Fixing GRUB IOMMU Configuration ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
GRUB_FILE="/etc/default/grub"
|
||||||
|
|
||||||
|
# Backup
|
||||||
|
cp "$GRUB_FILE" "$GRUB_FILE.backup.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
echo "✓ Backup created"
|
||||||
|
|
||||||
|
# Remove the conflicting amd_iommu=off
|
||||||
|
sed -i 's/ amd_iommu=off//' "$GRUB_FILE"
|
||||||
|
|
||||||
|
echo "✓ Removed amd_iommu=off from GRUB config"
|
||||||
|
echo ""
|
||||||
|
echo "New GRUB_CMDLINE_LINUX_DEFAULT:"
|
||||||
|
grep "GRUB_CMDLINE_LINUX_DEFAULT" "$GRUB_FILE"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Update GRUB
|
||||||
|
echo "Updating GRUB..."
|
||||||
|
update-grub
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Fix Complete ==="
|
||||||
|
echo ""
|
||||||
|
echo "⚠️ REBOOT NOW to apply changes: sudo reboot"
|
||||||
|
echo ""
|
||||||
|
echo "After reboot, verify with:"
|
||||||
|
echo " ./verify-gpu-passthrough.sh"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
48
portainer-compose-stacks/windows/fix-grub-manual.sh
Normal file
48
portainer-compose-stacks/windows/fix-grub-manual.sh
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Manual GRUB fix - completely rewrite the GRUB_CMDLINE_LINUX_DEFAULT line
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "Please run as root: sudo $0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== Fixing GRUB Configuration (Manual Method) ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
GRUB_FILE="/etc/default/grub"
|
||||||
|
|
||||||
|
# Backup
|
||||||
|
cp "$GRUB_FILE" "$GRUB_FILE.backup.manual.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
echo "✓ Backup created"
|
||||||
|
|
||||||
|
# Replace the entire line with a clean version
|
||||||
|
sed -i 's|^GRUB_CMDLINE_LINUX_DEFAULT=.*|GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on iommu=pt vfio-pci.ids=1002:1586,1002:1640 amdgpu.gttsize=131072 ttm.pages_limit=33554432 amdgpu.si_support=1 amdgpu.cik_support=1 radeon.si_support=0 radeon.cik_support=0"|' "$GRUB_FILE"
|
||||||
|
|
||||||
|
echo "✓ GRUB configuration updated"
|
||||||
|
echo ""
|
||||||
|
echo "New configuration:"
|
||||||
|
grep "GRUB_CMDLINE_LINUX_DEFAULT" "$GRUB_FILE"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Update GRUB
|
||||||
|
echo "Updating GRUB..."
|
||||||
|
update-grub
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Fix Complete ==="
|
||||||
|
echo ""
|
||||||
|
echo "Changes made:"
|
||||||
|
echo " - Removed: amd_iommu=off"
|
||||||
|
echo " - Added: amd_iommu=on iommu=pt"
|
||||||
|
echo " - Added: vfio-pci.ids=1002:1586,1002:1640"
|
||||||
|
echo ""
|
||||||
|
echo "⚠️ REBOOT REQUIRED: sudo reboot"
|
||||||
|
echo ""
|
||||||
|
echo "After reboot, check:"
|
||||||
|
echo " cat /proc/cmdline | grep amd_iommu"
|
||||||
|
echo " Should show ONLY: amd_iommu=on"
|
||||||
|
|
||||||
|
|
||||||
109
portainer-compose-stacks/windows/setup-gpu-passthrough.sh
Normal file
109
portainer-compose-stacks/windows/setup-gpu-passthrough.sh
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# GPU Passthrough Setup for AMD Strix Halo iGPU to Windows Container
|
||||||
|
# This script enables IOMMU and configures VFIO-PCI for GPU passthrough
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "=== AMD Strix Halo GPU Passthrough Setup ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if running as root
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "Please run as root (sudo)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# GPU PCI IDs
|
||||||
|
GPU_PCI="0000:c5:00.0"
|
||||||
|
GPU_AUDIO_PCI="0000:c5:00.1"
|
||||||
|
GPU_VENDOR_ID="1002"
|
||||||
|
GPU_DEVICE_ID="1586"
|
||||||
|
|
||||||
|
# Check current IOMMU status
|
||||||
|
echo "Current IOMMU status:"
|
||||||
|
cat /proc/cmdline | grep -o "amd_iommu=[^ ]*" || echo "IOMMU not configured in kernel parameters"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 1: Enable IOMMU in GRUB
|
||||||
|
echo "Step 1: Checking GRUB configuration..."
|
||||||
|
GRUB_FILE="/etc/default/grub"
|
||||||
|
|
||||||
|
if ! grep -q "amd_iommu=on" "$GRUB_FILE"; then
|
||||||
|
echo "Adding IOMMU parameters to GRUB..."
|
||||||
|
cp "$GRUB_FILE" "$GRUB_FILE.backup.$(date +%Y%m%d-%H%M%S)"
|
||||||
|
|
||||||
|
# Update GRUB_CMDLINE_LINUX_DEFAULT
|
||||||
|
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 amd_iommu=on iommu=pt vfio-pci.ids=1002:1586,1002:1640"/' "$GRUB_FILE"
|
||||||
|
|
||||||
|
# Clean up double spaces
|
||||||
|
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=" /GRUB_CMDLINE_LINUX_DEFAULT="/' "$GRUB_FILE"
|
||||||
|
|
||||||
|
echo "Updating GRUB..."
|
||||||
|
update-grub
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✓ GRUB updated. IOMMU will be enabled after reboot."
|
||||||
|
else
|
||||||
|
echo "✓ IOMMU already configured in GRUB"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Step 2: Configure VFIO modules
|
||||||
|
echo ""
|
||||||
|
echo "Step 2: Configuring VFIO modules..."
|
||||||
|
VFIO_CONF="/etc/modprobe.d/vfio.conf"
|
||||||
|
|
||||||
|
cat > "$VFIO_CONF" << EOF
|
||||||
|
# Bind AMD Strix Halo GPU to VFIO for passthrough
|
||||||
|
options vfio-pci ids=1002:1586,1002:1640
|
||||||
|
softdep amdgpu pre: vfio-pci
|
||||||
|
softdep snd_hda_intel pre: vfio-pci
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "✓ VFIO configuration created"
|
||||||
|
|
||||||
|
# Step 3: Update initramfs
|
||||||
|
echo ""
|
||||||
|
echo "Step 3: Adding VFIO modules to initramfs..."
|
||||||
|
MODULES_FILE="/etc/initramfs-tools/modules"
|
||||||
|
|
||||||
|
if ! grep -q "vfio_pci" "$MODULES_FILE"; then
|
||||||
|
cat >> "$MODULES_FILE" << EOF
|
||||||
|
|
||||||
|
# VFIO modules for GPU passthrough
|
||||||
|
vfio
|
||||||
|
vfio_iommu_type1
|
||||||
|
vfio_pci
|
||||||
|
vfio_virqfd
|
||||||
|
EOF
|
||||||
|
echo "✓ VFIO modules added to initramfs"
|
||||||
|
else
|
||||||
|
echo "✓ VFIO modules already in initramfs"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Updating initramfs..."
|
||||||
|
update-initramfs -u
|
||||||
|
|
||||||
|
# Step 4: Summary and next steps
|
||||||
|
echo ""
|
||||||
|
echo "=== Setup Complete ==="
|
||||||
|
echo ""
|
||||||
|
echo "Configuration applied:"
|
||||||
|
echo " - IOMMU enabled in GRUB (amd_iommu=on iommu=pt)"
|
||||||
|
echo " - GPU (1002:1586) bound to vfio-pci driver"
|
||||||
|
echo " - Audio (1002:1640) bound to vfio-pci driver"
|
||||||
|
echo " - Initramfs updated with VFIO modules"
|
||||||
|
echo ""
|
||||||
|
echo "⚠️ REBOOT REQUIRED to apply changes by running: 'sudo update-grub' and 'sudo reboot'"
|
||||||
|
echo ""
|
||||||
|
echo "After reboot:"
|
||||||
|
echo " 1. Verify IOMMU is enabled: dmesg | grep -i iommu"
|
||||||
|
echo " 2. Check GPU binding: lspci -nnk -d 1002:1586"
|
||||||
|
echo " 3. Start Windows container: docker-compose up -d"
|
||||||
|
echo " 4. Install AMD drivers in Windows"
|
||||||
|
echo ""
|
||||||
|
echo "To reboot now, run: reboot"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
82
portainer-compose-stacks/windows/unbind-gpu-from-vfio.sh
Normal file
82
portainer-compose-stacks/windows/unbind-gpu-from-vfio.sh
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Unbind the AMD GPU from VFIO and restore it to the host (amdgpu driver)
|
||||||
|
# Run this AFTER stopping the Windows container to restore host GPU access
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
echo "Please run as root: sudo $0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "=== Unbinding AMD GPU from VFIO ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
GPU_PCI="0000:c5:00.0"
|
||||||
|
AUDIO_PCI="0000:c5:00.1"
|
||||||
|
|
||||||
|
# Stop Windows container first
|
||||||
|
echo "Checking if Windows container is running..."
|
||||||
|
if docker ps | grep -q windows2; then
|
||||||
|
echo "Stopping Windows container..."
|
||||||
|
docker stop windows2
|
||||||
|
echo "✓ Container stopped"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Unbind from vfio-pci
|
||||||
|
echo ""
|
||||||
|
echo "Unbinding from vfio-pci..."
|
||||||
|
if [ -e /sys/bus/pci/devices/$GPU_PCI/driver ]; then
|
||||||
|
echo "$GPU_PCI" > /sys/bus/pci/devices/$GPU_PCI/driver/unbind
|
||||||
|
echo "✓ GPU unbound from vfio-pci"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e /sys/bus/pci/devices/$AUDIO_PCI/driver ]; then
|
||||||
|
echo "$AUDIO_PCI" > /sys/bus/pci/devices/$AUDIO_PCI/driver/unbind
|
||||||
|
echo "✓ Audio unbound from vfio-pci"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove device IDs from vfio-pci
|
||||||
|
echo "1002 1586" > /sys/bus/pci/drivers/vfio-pci/remove_id 2>/dev/null || true
|
||||||
|
echo "1002 1640" > /sys/bus/pci/drivers/vfio-pci/remove_id 2>/dev/null || true
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
# Rebind to host drivers
|
||||||
|
echo ""
|
||||||
|
echo "Binding back to host drivers..."
|
||||||
|
echo "$GPU_PCI" > /sys/bus/pci/drivers_probe
|
||||||
|
echo "$AUDIO_PCI" > /sys/bus/pci/drivers_probe
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
GPU_DRIVER=$(lspci -nnk -s c5:00.0 | grep "Kernel driver in use" | awk '{print $5}')
|
||||||
|
AUDIO_DRIVER=$(lspci -nnk -s c5:00.1 | grep "Kernel driver in use" | awk '{print $5}')
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Status ==="
|
||||||
|
if [ "$GPU_DRIVER" = "amdgpu" ]; then
|
||||||
|
echo "✓ GPU restored to amdgpu"
|
||||||
|
else
|
||||||
|
echo "⚠ GPU bound to: ${GPU_DRIVER:-none}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$AUDIO_DRIVER" = "snd_hda_intel" ]; then
|
||||||
|
echo "✓ Audio restored to snd_hda_intel"
|
||||||
|
else
|
||||||
|
echo "⚠ Audio bound to: ${AUDIO_DRIVER:-none}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
if [ "$GPU_DRIVER" = "amdgpu" ]; then
|
||||||
|
echo "✓ GPU restored to host!"
|
||||||
|
echo ""
|
||||||
|
echo "You may need to restart your display manager:"
|
||||||
|
echo " sudo systemctl restart gdm3 # for GNOME"
|
||||||
|
echo " sudo systemctl restart lightdm # for XFCE/other"
|
||||||
|
else
|
||||||
|
echo "⚠ GPU not fully restored. You may need to reboot."
|
||||||
|
fi
|
||||||
|
|
||||||
96
portainer-compose-stacks/windows/verify-gpu-passthrough.sh
Normal file
96
portainer-compose-stacks/windows/verify-gpu-passthrough.sh
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Verification script for GPU Passthrough Setup
|
||||||
|
# Run this after reboot to verify IOMMU and VFIO configuration
|
||||||
|
|
||||||
|
echo "=== GPU Passthrough Verification ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check 1: IOMMU enabled
|
||||||
|
echo "1. Checking IOMMU status..."
|
||||||
|
if dmesg | grep -qi "AMD-Vi: AMD IOMMUv2 loaded"; then
|
||||||
|
echo " ✓ IOMMU is enabled"
|
||||||
|
else
|
||||||
|
echo " ✗ IOMMU not detected in dmesg"
|
||||||
|
echo " Boot parameters: $(cat /proc/cmdline | grep -o 'amd_iommu=[^ ]*\|iommu=[^ ]*')"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check 2: VFIO module loaded
|
||||||
|
echo "2. Checking VFIO modules..."
|
||||||
|
if lsmod | grep -q vfio_pci; then
|
||||||
|
echo " ✓ vfio_pci module loaded"
|
||||||
|
else
|
||||||
|
echo " ✗ vfio_pci module not loaded"
|
||||||
|
echo " Try: modprobe vfio-pci"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check 3: GPU bound to VFIO
|
||||||
|
echo "3. Checking GPU (c5:00.0) driver binding..."
|
||||||
|
GPU_DRIVER=$(lspci -nnk -s c5:00.0 | grep "Kernel driver in use" | awk '{print $5}')
|
||||||
|
if [ "$GPU_DRIVER" = "vfio-pci" ]; then
|
||||||
|
echo " ✓ GPU bound to vfio-pci"
|
||||||
|
else
|
||||||
|
echo " ✗ GPU bound to: ${GPU_DRIVER:-none}"
|
||||||
|
echo " Expected: vfio-pci"
|
||||||
|
fi
|
||||||
|
|
||||||
|
lspci -nnk -s c5:00.0 | head -5
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check 4: Audio bound to VFIO
|
||||||
|
echo "4. Checking GPU Audio (c5:00.1) driver binding..."
|
||||||
|
AUDIO_DRIVER=$(lspci -nnk -s c5:00.1 | grep "Kernel driver in use" | awk '{print $5}')
|
||||||
|
if [ "$AUDIO_DRIVER" = "vfio-pci" ]; then
|
||||||
|
echo " ✓ Audio bound to vfio-pci"
|
||||||
|
else
|
||||||
|
echo " ✗ Audio bound to: ${AUDIO_DRIVER:-none}"
|
||||||
|
echo " Expected: vfio-pci"
|
||||||
|
fi
|
||||||
|
|
||||||
|
lspci -nnk -s c5:00.1 | head -5
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check 5: IOMMU groups
|
||||||
|
echo "5. Checking IOMMU groups..."
|
||||||
|
if [ -e /sys/bus/pci/devices/0000:c5:00.0/iommu_group ]; then
|
||||||
|
GPU_GROUP=$(basename $(readlink /sys/bus/pci/devices/0000:c5:00.0/iommu_group))
|
||||||
|
echo " ✓ GPU IOMMU group: $GPU_GROUP"
|
||||||
|
echo " Devices in group:"
|
||||||
|
ls -1 /sys/bus/pci/devices/0000:c5:00.0/iommu_group/devices/ | sed 's/^/ - /'
|
||||||
|
else
|
||||||
|
echo " ✗ IOMMU group not found for GPU"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check 6: VFIO devices
|
||||||
|
echo "6. Checking /dev/vfio devices..."
|
||||||
|
if [ -e /dev/vfio/vfio ]; then
|
||||||
|
echo " ✓ /dev/vfio/vfio exists"
|
||||||
|
ls -la /dev/vfio/ | sed 's/^/ /'
|
||||||
|
else
|
||||||
|
echo " ✗ /dev/vfio/vfio not found"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
echo "=== Summary ==="
|
||||||
|
if [ "$GPU_DRIVER" = "vfio-pci" ] && [ "$AUDIO_DRIVER" = "vfio-pci" ] && [ -e /dev/vfio/vfio ]; then
|
||||||
|
echo "✓ GPU passthrough is configured correctly!"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo " 1. Start the Windows container: cd /mnt/shared/DEV/repos/d-popov.com/scripts/portainer-compose-stacks/windows && docker-compose up -d"
|
||||||
|
echo " 2. Connect to Windows via RDP: localhost:3389"
|
||||||
|
echo " 3. Install AMD Radeon drivers in Windows"
|
||||||
|
echo " 4. GPU should appear as 'AMD Strix Halo' in Device Manager"
|
||||||
|
else
|
||||||
|
echo "✗ GPU passthrough configuration needs attention"
|
||||||
|
echo ""
|
||||||
|
echo "If GPU is not bound to vfio-pci:"
|
||||||
|
echo " - Check /etc/modprobe.d/vfio.conf"
|
||||||
|
echo " - Run: sudo update-initramfs -u"
|
||||||
|
echo " - Reboot again"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user