DockerでmacOSファイル共有サーバ(Netatalk)をお手軽構築

インフラ技術

自宅サーバーが古くなり、いつ故障してもおかしくない状況なので少しずつ移行をはじめています。新サーバーでは原則としてDockerコンテナでの再構築に取り組んでおり、それぞれの機能をメモしていきます。

今回はNetatalkについて。

Netatalk とは

macOS向けのファイル共有プロトコル(AFP)を提供するオープンソースソフトウェアです。MacはWindowsの共有フォルダ(SMB)も普通に使えますが、.DS_Store といったゴミファイルが見えてしまう等の煩わしさがあるので、より純粋なファイル共有プロトコルを採用します。

Netatalk - Wikipedia

Docker Imageの選定

DockerHubで検索し、Starsの数が一定数あるものから選定しました。

❯ docker search netatalk
INDEX       NAME                                  STARS
docker.io   docker.io/odarriba/timemachine        22
docker.io   docker.io/cptactionhank/netatalk      13
docker.io   docker.io/cilix/netatalk              1

odarriba/timemachine はTimeMachine特化なので今回は外し、cptactionhank/netatalk を選択しました。

docker-compose.yml

version: '2'

services:
  netatalk:
    image: cptactionhank/netatalk:latest
    container_name: netatalk
    network_mode: host
    env_file: credential.env
    environment:
      - AVAHI=1
    ports:
      - "548:548"
    volumes:
      - /your/media/path:/media/share
    restart: always

credential.env:

AFP_USER=username
AFP_PASSWORD=password
AFP_UID=1000
AFP_GID=1000

設定のポイント

  • デフォルト設定では /media/share のみが共有されます
  • 1組のユーザーID/パスワードを環境変数で設定する必要があります
  • 標準設定で不足する場合は /etc/afp.conf をvolume mountで置換可能です
  • AVAHI=1 を設定するとAuto Discoveryが有効になり、Finderの「共有」に自動検出されます
  • network_mode: host はAvahiのAuto Discoveryを機能させるために必要です。コンテナの仮想NICにbindした場合は自動検出が動作しません

まとめ

DockerHubのイメージを利用して簡単にMacファイル共有サーバーを作成しました。この方法で作成したネットワークパスをTimeMachineの保存場所としても利用できるはずです。

参考: GitHub - cptactionhank/docker-netatalk

Related Posts