Dockerコンテナでボリュームにアクセスする必要がある

みなさん、こんにちは。

私はSimpleHelpというサポートアプリケーションをContainer StationのDockerコンテナで運用しています。動作は非常に良好ですが、ひとつ問題があります。新しいリリースが出るたびにSimpleHelpソフトウェアをアップデートできません。もちろん、新しいコンテナを作成することはできますが、毎回それを行い、すべての設定を再構築するのは面倒です。

私がやりたいことは、コンテナ内のファイルにアクセスするか、コンテナを設定してNAS上のディレクトリを利用できるようにすることです。ボリュームをコンテナに作成することでこれを実現しようとしていますが、方法がはっきりせず、何度も行き詰まっています。ボリュームを作成しようとするとコンテナ名が必要ですが、入力するコンテナ名がすべて無効なパスだと表示されます。そこで止まってしまっています。

きっとこれを実現する方法があるはずなので、ここで質問させていただきます。

よろしくお願いします!

composeファイルでセットアップし、設定とデータをNAS上の永続フォルダーに保存します

例:

ありがとうございます。でも正直なところ、どうやればいいのか全く分かりません!Dockerは全くの初心者で、composeスクリプトの書き方も分かりません…

ここに追加すればいいのでしょうか?

    volumes:
       - /etc/timezone:/etc/timezone:ro
       - /etc/localtime:/etc/localtime:ro
       - /opt/appdata/simplehelp/configuration:/opt/SimpleHelp/configuration

そして、QNAP標準のフォルダパスをそのまま使えばいいのでしょうか?上記のパスはすべてコンテナ内のローカルパスですよね?では、コンテナ外のパスを指定するにはどうすればいいですか?

「/share/‘sharename’」であるべきです

OK。では、次のような感じでいいでしょうか:

    volumes:
       - /etc/timezone:/etc/timezone:ro
       - /etc/localtime:/etc/localtime:ro
       - /opt/appdata/simplehelp/configuration:/share/Container/SimpleHelp

これで合っていますか?

逆です…最初にローカルのマウント先、その後にコンテナ内の場所です

- /share/Container/SimpleHelp:/opt/appdata/simplehelp/configuration

OK。後ろに :rw を指定する必要がありますか?それとも read/write と書くべきですか?それともそのままにしておけばいいですか?

デフォルトはrwで、そのフラグによってroが設定されると思います。

例えば、Plexメディアフォルダをroに設定すれば、コンテナがマルウェアに感染してもメディアファイルを削除できなくなります。

OK。ありがとうございます。試してみます。

ところで、NASから既存のコンテナファイルを読み取る方法はありますか?まだ方法が分かりません。できないのでしょうか?

WinSCP(簡単なGUIのため)を使って作成されたボリュームにアクセスできます。ここに表示されている場所に移動してください。


はい、現在のコンテナにはボリュームがありません。リポジトリからウィザードを使って作成しました。

File Stationで以下の場所に入ることができます:

/Container/container-station-data/lib/docker/containers/aa5528825f8a5980c5caffbc046d9057ee10f0fadea6a932697fb5fac51ce90c

しかし、その中には役立つものは何もありません。ここでWinSCPが必要なのでしょうか?

うーん…コンテナのSSHセッションを追加して、コンテナに直接接続してみることができます(SSH経由でも動作するはずです)。

コンテナのコンソールにはアクセスできるのですが、そこから外に出る方法が分かりません…

OK。何か間違ったことをしてしまいました。YMLファイルを取得し、話し合った通りデータを保存するためのローカルボリュームを追加するように修正しました。これをContainerStationでアプリケーションとして作成しました。しかし、アプリケーションは表示されませんでした。ただし、Imagesに別のDockerイメージが表示されました。それをインストールして起動しましたが、データ保存用にNAS上に作成したフォルダーには何も保存されていませんでした。

同じDockerイメージをダウンロードしましたが、デフォルトのインストールには3つのNATポートマッピングが含まれていました
SSH
HTTP
HTTPS

そのSSHに接続できるか確認してみてください

残念ながら、できません。接続が拒否されています。SimpleHelp管理アプリを使ってサーバーデータのバックアップは取得できています。ですので、今そのデータをNAS上のアクセス可能なフォルダーに保存する方法が分かれば、バックアップから復元できるはずです。しかし、YMLファイルでの試みはうまくいかなかったようです。なので、そこに集中しましょう…

アプリが作成されていないようです:

アプリケーション「simplehelp」の作成に失敗しました。エラーメッセージ: operateAppアクション [--project-name simplehelp up -d --remove-orphans] が失敗しました: exit status 1: time="2025-03-27T12:19:37-05:00" level=warning msg="/share/CACHEDEV2_DATA/.qpkg/container-station/data/application/simplehelp/docker-compose.yml: 属性「version」は廃止されており、無視されます。混乱を避けるために削除してください" network frontbridgeはexternalとして宣言されていますが、見つかりませんでした

composeファイルを投稿してもらえますか?

version: "3.2"

services:
#SimpleHelp コンテナ
  simplehelp:
    image: tecneo/simplehelp
    container_name : simplehelp
    ports:
      - "8680:80"
      - "8681:80/udp"
      - "8643:443"
      - "8643:443/udp"
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - /share/Container/SimpleHelp/configuration:/opt/SimpleHelp/configuration
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.simplehelp.rule=Host(`SUBDOMAIN.DOMAIN.EXT`)"
      - "traefik.http.routers.simplehelp.entrypoints=web,websecure"
      - "traefik.http.routers.simplehelp.tls.certresolver=myresolver"
      - "traefik.http.services.simplehelp.loadbalancer.server.port=80"
      - "traefik.udp.routers.simplehelp-udp.entrypoints=webudp"
      - "traefik.udp.routers.simplehelp-udp.service=simplehelp"
      - "traefik.udp.services.simplehelp.loadbalancer.server.port=80"
    networks:
      - frontbridge
      
networks:
  frontbridge:
    external: true

そのパス名は、あなたが投稿したGitHubリンクにあったものから変更しただけです。

こちらではネットワークセクションを削除すると正常に動作します(NATとしてすでに上の方で定義されていました)

services:
#SimpleHelp コンテナ
  simplehelp:
    image: tecneo/simplehelp
    container_name : simplehelp
    ports:
      - "8680:80"
      - "8681:80/udp"
      - "8643:443"
      - "8643:443/udp"
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - /share/Container/SimpleHelp/configuration:/opt/SimpleHelp/configuration
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.simplehelp.rule=Host(`SUBDOMAIN.DOMAIN.EXT`)"
      - "traefik.http.routers.simplehelp.entrypoints=web,websecure"
      - "traefik.http.routers.simplehelp.tls.certresolver=myresolver"
      - "traefik.http.services.simplehelp.loadbalancer.server.port=80"
      - "traefik.udp.routers.simplehelp-udp.entrypoints=webudp"
      - "traefik.udp.routers.simplehelp-udp.service=simplehelp"
      - "traefik.udp.services.simplehelp.loadbalancer.server.port=80"

こちらでは設定フォルダーが正常に埋められています