QNAPのContainer StationやLXD/Dockerにリモートからコマンドライン接続 (LXDとDocker)

投稿者: | 9月 23, 2025
なぜ、リモートクライアントからの利用にこだわるのか?
GUIやローカルのクライアントから実行してもいいのだが、以下の理由
 
  • 使い慣れたシェル上で使いたい。
  • 本体を触らずに補完コマンドを入れたい。
  • 外部から自動化をしたい。
  • 本体と自身の端末がネットワーク的に遠い。
  • 本体にログインをしたくない。
  • デバッグしやすい、見えない設定が見えたり、設定ができたりする。
 
といった理由だと思う。
 
Kubernetesのノードにログインして使う人はほとんどいなく、クライアントから使うことが多い。
 
 
閑話休題
 
 
リモートコマンドでQNAPの仮想化、コンテナを使いたいというのがある。
今回は、Container Station編。、Virtualization Station編は、こちら
 
この方法は、あくまでもContainer Stationのエンジンである、LXD/Dockerに直接接続をしているので、Container Stationに直接接続をしているわけではないので注意。
よって、あくまでも逸般の誤家庭へのご紹介であって、直接操作するのはおすすめしないし、設定を変えるのは、もっとお勧めしない。設定を変えて動かなくなったといっても責任は持てない。
(なので、lxcやdockerコマンドで何ができるかは記載しない。調べればわかると思うが。でも自己責任)
しかし、これは便利だぁ。virshと違って常用してもいいかも
ただインフラ特にネットワーク周りは触らない方がいいかも。
 
Virtualization Stationと違ってとても素直に接続ができるので、対象がQNAPじゃなくても使える方法。ただし、lxcを他のOS(例えば、WindowsやMAC)に入れるのは手間なので、クライアントだけコンパイルをしてインストールをすることにした。
 

LXDの設定

一応、QNAPのLXCのバージョン確認
lxc version
Client version: 5.0.2-qnap5
Server version: 5.0.2-qnap5
とのこと

QNAP Container Station側のLXDの設定

QNAPにsshでログインして、以下を行う。
core.https_addressをデフォルトの8443から18443に指定している。よって接続時にはポートの指定が必要(8443は何かとコンフリクトしそうなので)。また、LXDのWeb UIが存在するバージョンだが、停止あるいは削除されている。一応、Container Stationに敬意を払う(おかしくなるのを防ぐ)ため、そこは触らない。
sudo -i
 
lxc config show
lxc config set core.https_address “[::]:18443”
lxc config set core.trust_password “YourP@ssw0rd”
lxc config get core.https_address
lxc config get core.trust_password
lxc config show
 
(参考)設定を解除するには?
lxc config unset core.https_address
lxc config unset core.trust_password
lxc config get core.https_address
lxc config show –expanded
これで、QNAPのSSHセッションから抜ける。(もうQNAP側での作業はない。)
 

LXCクライアントの設定

クライアントがUbuntuで、手元の端末にもlxdがインストールされてもいいのであれば、以下を実行すればいい。
snap install lxd –channel=5/stable
 
手元の端末が、MacやWindowsの場合は、そもそもLXDをインストールできないので、lxcコマンドだけ作成する。lxd 6.xからはGoでコンパイルができる。おまけにMacでもWindowsでもバイナリの作成も利用可能。(実はMacでlxcコマンドを使いたかった。)
goがインストールされていないのであれば、まずgoをインストール。また、Goは最新版をインストールすることを推奨。
lxcは、最新版を指定していて後方互換性があるので問題ないが、新しいAPIは使えない。また、サーバと同一バージョンのlxcクライアントはgoではコンパイル(マルチプラットフォームで動かすことが難しくなる)できないので、ここでは最新版をインストールする。
sudo -i
 
curl -OL https://go.dev/dl/go1.25.1.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.25.1.linux-amd64.tar.gz
rm go1.25.1.linux-amd64.tar.gz
cat << ‘EOF’ > /etc/profile.d/go.sh
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
EOF
chmod +x /etc/profile.d/go.sh
source /etc/profile.d/go.sh
export GOBIN=/usr/local/bin
go install github.com/canonical/lxd/lxc@latest
which lxc
lxc version
SHELL_NAME=$(basename “$SHELL”)
/usr/local/bin/lxc completion “$SHELL_NAME” > /etc/profile.d/lxc.sh
chmod +x /etc/profile.d/lxc.sh
exit
一旦ログオフして、再度ログイン
 
動作確認(一般ユーザで)
LXDPASS=”YourP@ssw0rd”
QNAPHOST=192.168.100.40:18443
LXDNAME=qnap1
 
lxc remote add ${LXDNAME} ${QNAPHOST} –password ${LXDPASS} –accept-certificate
lxc remote list
lxc remote get-default
lxc list ${LXDNAME}:
lxc remote switch ${LXDNAME}
lxc remote get-default
lxc remote list
 
サーバの登録を解除するには?
lxc remote get-default
lxc remote remove qnap1
lxc remote switch local
lxc remote get-default
 
QNAPのLXDの設定確認
プロファイルの確認
ただし、デフォルトのプロファイルには、NICがついていないことに注意。
lxc profile list
lxc profile show default
 
 

Dockerの設定

クライアントのインストール

MacやWindowsの場合は、Docker Desktopを入れてしまった方が簡単。
Linuxの場合(以降Linuxで説明)
dockerクライアントとcomposeしか入れない。
sudo -i
 
apt update
apt -y install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo “${UBUNTU_CODENAME:-$VERSION_CODENAME}”) stable” | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
#sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
apt -y install docker-ce-cli docker-compose
exit
 
事前にContainer Stationから証明書をダウンロードして/tmpにcert.zipをアップロードをしておく。
 
(あるいは/share/CACHEDEV1_DATA/.qpkg/container-station/etc/docker/tls/からコピーをする。)
/share/CACHEDEV1_DATA/.qpkg/container-station/etc/docker/tls/ca.pem
/share/CACHEDEV1_DATA/.qpkg/container-station/etc/docker/tls/cert.pem
/share/CACHEDEV1_DATA/.qpkg/container-station/etc/docker/tls/key.pem
 
 
一般ユーザで以下を行う。
DOCKERCER=$HOME/.docker
 
mkdir -p ${DOCKERCER}
cd ${DOCKERCER}
apt -y install unzip
unzip /tmp/cert.zip
rm /tmp/cert.zip
cd
chmod 0400 ${DOCKERCER}/key.pem
chmod 0444 ${DOCKERCER}/ca.pem ${DOCKERCER}/cert.pem
 
テストで接続してみる。
docker -H=’tcp://192.168.10.4:2376′ –tlsverify ps
 
コンテキストの登録
証明書のパスはフルパスではないとダメ。~/.docker/ca.pemでは認識しない。
QNAPHOST=192.168.100.40
DOCKERNAME=qnap1
DOCKERCER=$HOME/.docker
 
docker context create ${DOCKERNAME} –description “QNAP TS464 Container Station” \
–docker “host=tcp://${QNAPHOST}:2376,ca=${DOCKERCER}/ca.pem,cert=${DOCKERCER}/cert.pem,key=${DOCKERCER}/key.pem”
docker context ls
docker context use ${DOCKERNAME}
docker context ls
docker ps
 
ローカルのdockerを使うには?
コンテキスト defaultにする
docker context use default
 
サーバの登録を解除するには?
docker context use default
docker context rm qnap1
docker context ls

コメントを残す