Container Station、dockerのENVファイルとSSHの違い

私が調べた限り、QNAPはコンテナステーション(Container Station)でdocker用yamlの一部として.envファイルをネイティブにサポートしておらず、今後もその予定はないようです。SSH経由でdockerを作成すれば、コンテナステーション上に表示はされますが、GUIの機能はほとんど使えず(コマンドも使えず、管理するには再度SSHで入る必要があります)。これ自体は特に問題ではないのですが、SSH経由で同じyamlを使ってdocker composeを実行すると、うまく動作しません。これは仮想スイッチやネットワーク、あるいはストレージ参照が正しく反映されないことが原因ではないかと考えています。同じyamlをコンテナステーションで使うと問題なく動作します。

同じような経験をされた方はいらっしゃいますか?変数をyamlに直接記載すること自体は気になりませんが、なぜうまく動作しないのか理解できません。残念ながら、dockerやLinuxの知識が十分ではないため、どこで問題が発生しているのか特定できません。

具体的にはImmich(https://immich.app/docs/install/docker-compose)で試しました。

Docker で完全な CS の使用は諦めました。

Portainer/Dockge 用に CS を使用し、その後管理用にそれを使ってください。

CS で新しい「アプリケーション」を作成します。

services:
  portainer:
    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:
    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

そこで使っているdockerproxy(ドッカープロキシ)とは何ですか?私はそれを使ったことがありませんが、必要なものなのでしょうか?

Dockerのふりをすることで、すべてにDockerデーモンへのアクセス権を与えつつ、Dockerへの生の無制限アクセスは許可しないようにしています。

おそらくあなたには必要ないと思いますが、私自身はこれで安心できます。

私はQNAPでシンプルなdocker-compose.ymlと.envをテストしてみましたが、SSH経由で問題なく動作しました。

もしdocker-compose.ymlと.envファイル(機密情報は削除しても構いません)を共有していただければ、私がテストしてみて、問題の原因を調べるお手伝いができます。

YAMLにタイプミスを見つけました。これがすべての問題の根源でした。なので、あなたが言った通り、ちゃんと動作します!

ただ、Portainer(ポーテイナー)を試してみようと思います。もしみんながCSより気に入っているなら。Portainerは、コマンドラインで作成した場合でも、SSHせずに基本的な操作ができますか?CSとは違って。

私が投稿した通り、CSからPortainerを問題なく起動できます。SSHを使わずに完全にセットアップすることも可能です。CSで新しいアプリケーションを作成し、YAMLを貼り付けるだけです。

別の共有フォルダーやストレージプールのセットアップには、少しだけSSHを使うことをおすすめします。
私は /share/docker/ を使用しています。これなら、CSがPortainerで作成したものに一切触れることはありません。

コマンドライン(SSH経由)で .env ファイルを使うのは、他の人が言っている通り問題なく動作します。私はDockhandを特権コンテナで実行し、そこからすべてを管理しています。例えば、以下のような docker-compose.yaml ファイルを使います:

volumes:
  dockhand_data:

services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    user: "0:0"
    ports:
      - 3000:3000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data