Docker initial import looping?

Trying to get set up using your Docker image behind a traefik reverse proxy. Here’s the relevant portion of my docker-compose:

  photostructure:
    container_name: photostructure
    image: photostructure/server
    restart: on-failure
    networks:
      - t2_proxy
    stop_grace_period: 2m

    # This is the user id and group id you want PhotoStructure to run as:
    user: 1000:1000 # < CHANGE THIS LINE to userid:groupid you want PhotoStructure to run as

    volumes:
      # This is where your PhotoStructure Library will be stored.
      # It must be readable, writable, and have sufficient free space.
      # If it is a remote volume, uncomment the PS_FORCE_LOCAL_DB_REPLICA
      # environment line below.

      - type: bind
        source: /home/abyss/photostructure # < CHANGE THIS LINE
        target: /ps/library

      # This must be fast, local disk with many gigabytes free.
      # PhotoStructure will use this directory for file caching
      # and for storing a temporary database replica when your
      # library is on a remote volume.

      - type: bind
        source: "$DOCKERDIR/photostructure/tmp"
        target: /ps/tmp

      # This directory stores your "system settings"

      - type: bind
        source: "$DOCKERDIR/photostructure"
        target: /ps/config

      # This directory stores PhotoStructure logfiles.

      - type: bind
        source: "$DOCKERDIR/photostructure/logs"
        target: /ps/logs

    ports:
      - 1787:1787/tcp

    environment:
      # PhotoStructure has _tons_ of settings. See
      # <https://photostructure.com/faq/environment-variables/>
      
      - "PS_LOG_LEVEL=info"
      - "PS_TAIL_LOGS=1"
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.photostructure-rtr.entrypoints=https"
      - "traefik.http.routers.photostructure-rtr.rule=HostHeader(`photostructure.$DOMAINNAME`)"
      - "traefik.http.routers.photostructure-rtr.tls=true" # Had to add these to get the domain to resolve
      - "traefik.http.routers.photostructure-rtr.tls.certresolver=dns-cloudflare" # Had to add these to get the domain to resolve
      ## Middlewares
      - "traefik.http.routers.photostructure-rtr.middlewares=chain-basic-auth@file"
      ## HTTP Services
      - "traefik.http.routers.photostructure-rtr.service=photostructure-svc"
      - "traefik.http.services.photostructure-svc.loadbalancer.server.port=1787"

I’m seeing the UI, but when I go to do an initial import of a small token folder full of images, it just spins forever. The terminal output never throws errors, but it just keeps looping over the same output:

photostructure      | 2021-01-05T18:54:11.277Z sync-62 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:54:16.463Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:54:21.550Z web-27 info  WebRequest GET http://localhost/ping { ms: 2, status: 202, ip: '127.0.0.1', stale: true }
photostructure      | 2021-01-05T18:54:23.954Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:54:26.255Z web-27 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:54:28.650Z sync-62 info  SyncService status(): healthcheck is sad, let's clean up tmpfiles { ok:
photostructure      |    [ 'Used memory used by sync (23 MB) is OK',
photostructure      |      'RSS memory used by sync (59 MB) is OK' ],
photostructure      |   warn: [ 'Only 4.02 GB are available on /.' ],
photostructure      |   bad: [],
photostructure      |   fail: [] }
photostructure      | 2021-01-05T18:54:28.652Z sync-62 info  TmpfileCleanup Removed 0 files.
photostructure      | 2021-01-05T18:54:28.652Z sync-62 info  TmpfileCleanup Pruned 0 empty directories.
photostructure      | 2021-01-05T18:54:29.280Z sync-62 info  TmpfileCleanup Removed 0 files.
photostructure      | 2021-01-05T18:54:29.281Z sync-62 info  TmpfileCleanup Pruned 0 empty directories.
photostructure      | 2021-01-05T18:54:31.455Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:54:38.959Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:54:41.268Z web-27 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:54:41.299Z sync-62 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:54:43.588Z web-27 info  WebRequest GET http://localhost/ping { ms: 2, status: 202, ip: '127.0.0.1', stale: true }
photostructure      | 2021-01-05T18:54:46.459Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:54:51.087Z web-27 info  WebRequest GET http://photostructure.REDACTED.com/updates { ms: 100453, status: 200, ip: '192.168.90.254', stale: true }
photostructure      | 2021-01-05T18:54:51.667Z web-27 info  WebRequest GET http://localhost/ping { ms: 2, status: 202, ip: '127.0.0.1', stale: true }
photostructure      | 2021-01-05T18:54:53.962Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:00.708Z web-27 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:55:00.736Z sync-62 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:55:01.465Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:08.966Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:15.768Z web-27 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:55:16.467Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:21.819Z web-27 info  WebRequest GET http://localhost/ping { ms: 2, status: 202, ip: '127.0.0.1', stale: true }
photostructure      | 2021-01-05T18:55:23.970Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:28.433Z sync-62 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:55:28.464Z web-27 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:55:28.635Z sync-62 info  SyncService status(): healthcheck is sad, let's clean up tmpfiles { ok:
photostructure      |    [ 'Used memory used by sync (23 MB) is OK',
photostructure      |      'RSS memory used by sync (59 MB) is OK' ],
photostructure      |   warn: [ 'Only 4.02 GB are available on /.' ],
photostructure      |   bad: [],
photostructure      |   fail: [] }
photostructure      | 2021-01-05T18:55:28.638Z sync-62 info  TmpfileCleanup Removed 0 files.
photostructure      | 2021-01-05T18:55:28.638Z sync-62 info  TmpfileCleanup Pruned 0 empty directories.
photostructure      | 2021-01-05T18:55:29.280Z sync-62 info  TmpfileCleanup Removed 0 files.
photostructure      | 2021-01-05T18:55:29.281Z sync-62 info  TmpfileCleanup Pruned 0 empty directories.
photostructure      | 2021-01-05T18:55:31.471Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:38.974Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:43.463Z main-14 info  TmpfileCleanup Removed 0 files.
photostructure      | 2021-01-05T18:55:43.466Z main-14 info  TmpfileCleanup Pruned 0 empty directories.
photostructure      | 2021-01-05T18:55:43.588Z web-27 info  WebRequest GET http://localhost/ping { ms: 2, status: 202, ip: '127.0.0.1', stale: true }
photostructure      | 2021-01-05T18:55:46.475Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:55:47.269Z web-27 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:55:47.309Z sync-62 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:55:52.016Z web-27 info  WebRequest GET http://localhost/ping { ms: 2, status: 202, ip: '127.0.0.1', stale: true }
photostructure      | 2021-01-05T18:55:53.977Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:56:01.479Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:56:02.274Z web-27 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }
photostructure      | 2021-01-05T18:56:08.980Z sync-62 info  TagSql updateTagCounts() {}
photostructure      | 2021-01-05T18:56:10.439Z sync-62 info  currentLibraryLockOwner(/ps/library/.photostructure) currentLibraryLockOwner { result:
photostructure      |    { file: { nativePath: '/ps/library/.photostructure/opened-by/747y7qn-27.json' },
photostructure      |      hostname: 'REDACTED',
photostructure      |      serviceName: 'web',
photostructure      |      createdAt: 1609871248076,
photostructure      |      updatedAt: 1609871706538,
photostructure      |      systemUID: 'REDACTED',
photostructure      |      pid: 27 } }

I’m stumped.

If you look at the health check, it’s grumping about insufficient free disk space.

After you address that issue, there may be other problems behind that, though!

Yeah I see that but I didn’t assign / at any point in the compose file, and the main drive has 12gb free, and the drive where the library is stored has several terabytes. Where’s it getting that directory assignment from?

Looks like it’s the container root, which it shouldn’t care about if it’s in docker.

When it spins up, there should be a isDocker: true: if your docker host is a bit exotic, v0.9.1’s docker detection may not work correctly.

If you set PS_IS_DOCKER=1 as an environment variable in your docker-compose.yml, that may fix that. (This is done properly in the next release).

That didn’t have an effect but I temporarily shut down some other containers to free up space and it’s working properly now.

Thanks for the update.

I’ll verify (and if necessary, fix) the docker image to not complain about small container space.