Hunter
2025 年 5 月 15 日午後 2:31
1
こんにちは、皆さん。
TL;DR - Portainerのコンテナをコピー/バックアップしてContainer Stationに再デプロイできますか?それとも、Portainer StationをContainer Stationに接続する方法はありますか?
以前のトピックに続き、新しいQNAP TS-264-8Gに2 x 1TB WD Red SSD [SATA](RAID1)を搭載し、自動化されたPlex Media Server(PMS)の新しいソリューションを探しています。PMSはQTSにインストールし、すべてのアプリ(例:*arrs、SabNZBd)はコンテナとしてインストールしています。
まず最初にPMSをインストールしてアップデートし(外部メディアドライブにリンク)、問題なく動作しています。次にContainer Stationをインストールし、https://www.myqnap.org/ レポジトリからPortainerもインストールしました。ここまでは順調です。
次にPortainerを使って、lscr.io/linuxserver/[例:*arr]:latest からイメージをプルし、デフォルトポート(Map Additional Portを使用)や推奨される環境変数(PUID、PGID、TZ)、ボリューム、再起動ポリシーを設定してコンテナをインストールしました。
すべてのアプリは正常に動作し、互いに通信し、メディアをPlex外部メディアドライブに送信しています。問題ありません。しかし…CSでコンテナを確認しても何も表示されず、sshで「docker ps」を実行しても何もリストされません。
一点注意すべきなのは、Portainerでコンテナを作成する際に「デフォルト」のCSフォルダの場所を使用しませんでした。これはパスが非常に長かったため、YouTubeのガイドに従った結果でもあります。これが問題でしょうか?コンテナ自体は動いています!
確認のため、Container StationでBazarr(使用予定はありませんが)をインストールしてみたところ、正常に動作し、ssh「docker ps」でも表示されましたが、Portainerでは見えません!
そこで質問ですが、なぜCSとPortainerは通信できていないのでしょうか?PortainerのコンテナをエクスポートしてContainer Stationでデプロイすることは可能でしょうか?実際、Container Stationの方が好みで、アプリごとにLANポートを直接使う設定ができるので(QTSにインストールしたデフォルトのブリッジVPNをバイパスできます)。
長文になりましたが、できるだけ多くの情報を提供しようとしています。どなたか正しい方向性や、私が何を間違えたのかアドバイスいただけると助かります。できれば全てのコンテナを再設定せずに済ませたいです。
本当にありがとうございます!
編集 もう一つ気づいたことですが、Portainerをインストールした際、ドキュメントに記載されている初期設定ページがスキップされたようで、Portainerでインストールしたすべてのコンテナは「Primary」環境(「URL:/var/run/system-docker.sock」と表示)にあります。しかし、他の例を見ると「Local」環境(「/var/run/docker.sock」)もあります。これがかなり重要な気がしますが、Portainerでこの「Local」スタンドアロン環境を作成するオプションが表示されませんでした…
あなたの新しい発見は重要だと思います。私の知る限り、多くのQNAPサービスはContainer Stationの実行が必要ですが、Container StationのUIには表示されません。QTSには2つの異なるDocker環境が存在するのかもしれません。また、Portainerパッケージの開発者に相談する方が、より適切な助けを得られるかもしれません。
Hunter
2025 年 5 月 16 日午後 3:00
3
多くの試行錯誤の末(残念ながら一度QNAPを文鎮化してしまい、3秒リセットでアクセスを取り戻す羽目になりましたが)、デフォルト(そして唯一の)環境「Primary」で「…system-docker.sock」を使用していたことが問題だったと確かに確認できました。新しい環境を作成し、コンテナを手動で再構築した後、元の設定のバックアップを新しいコンテナに復元しました。現在はすべて順調に動作しており、QNAP VPNクライアントをバイパスしてLANに直接アクセスできるようになりました。かなり苦労しましたが(少なくとも今のところは順調です)、同じ問題に直面する方のために、私が行った手順をより詳しくドキュメント化する予定です。今は(非常に手動ですが)動作する解決策ができました。ありがとうございました!
Weedy
2025 年 5 月 18 日午後 5:57
4
*arrのラビットホールに行くなら、コンテナのセットアップにはPortainer(ポーテイナー)を使うべきだと思います。
CS3+でアプリケーションを作成し、CSがPortainerを制御し、Portainerで他のすべてを管理します。CSで何かを変更するのは面倒だし、dockerコマンドラインをCSにマッピングするのも面倒、docker composeをCSにマッピングするのは少しだけマシです。
Portainer(ポーテイナー)が正しいアプローチです。
(私はproxy(プロキシ)を使っています。なぜなら、触りたいものは全部docker.sockを必要とするし、QNAPでアプリやコンテナがソケットで変なことをした時に直す気が起きないからです。)
networks:
# このテンプレートを実行する前に下記ネットワークを作成してください
external_edge:
external: true
services:
portainer:
networks:
external_edge:
ipv4_address: 172.27.1.250
container_name: portainer-ce
image: portainer/portainer-ce:latest
security_opt:
- no-new-privileges:true
environment:
- TZ=America/Toronto
ports:
- 9001:8000
- 9000:9000
- 9043:9443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
- /share/Container/portainer-ce/data:/data:rw
restart: always
dockerproxy:
networks:
external_edge:
ipv4_address: 172.27.1.251
container_name: dockerproxy
image: ghcr.io/tecnativa/docker-socket-proxy:latest
environment:
# - PUID=1001
# - PGID=1000
- TZ=America/Toronto
- CONTAINERS=1 # コンテナの閲覧を許可
- SERVICES=1 # サービスの閲覧を許可(Docker Swarm使用時に必要)
- TASKS=1 # タスクの閲覧を許可(Docker Swarm使用時に必要)
- POST=0 # POST操作をすべて禁止(事実上読み取り専用)
ports:
- 127.0.0.1:2375:2375
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # 読み取り専用でマウント
restart: unless-stopped
Weedy
2025 年 5 月 18 日午後 6:03
5
そして、Portainer(ポータイナー)から実行する例のコンテナです。
networks:
# このテンプレートを実行する前に、下記ネットワークを作成してください
external_edge:
external: true
services:
jellyfin:
networks:
- external_edge
container_name: jellyfin
image: lscr.io/linuxserver/jellyfin:latest
deploy:
resources:
limits:
cpus: 3
memory: 2G
environment:
- PUID=1001
- PGID=1000
- TZ=America/Toronto
- DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel
- JELLYFIN_CONFIG_DIR=/config
- JELLYFIN_CACHE_DIR=/cache
- JELLYFIN_PublishedServerUrl=http://TheVault.local #オプション
ports:
- 8096:8096
- 8920:8920 #オプション
- 7359:7359/udp #オプション
- 1900:1900/udp #オプション
volumes:
- /share/docker/appdata/jellyfin/cache:/cache
- /share/docker/appdata/jellyfin/config:/config # ローカルのconfigディレクトリが存在することを確認してください
- /share/Media Library:/mnt/mediaShare:ro
# オプション - 字幕の焼き込みトランスコード時に使用する追加フォント
- /usr/share/fonts/:/usr/local/share/fonts/custom:ro
devices:
- /dev/dri:/dev/dri
restart: unless-stopped