@@ -237,11 +237,20 @@ in rec {
237237 };
238238 };
239239
240− dockerImage = args@{exe, name, version, extraContents ? [], extraPaths ? []}: let
240+ dockerImage = args@{exe, name, version, extraContents ? [], extraPaths ? [], config ? {}}: let
241241 appDirSetupScript = nixpkgs.runCommand "appDirSetupScript.sh" {} ''
242242 mkdir -p $out/var/lib/backend
243243 ln -sft $out/var/lib/backend '${exe}'/*
244244 ${nixpkgs.findutils}/bin/find $out/var/lib/backend
245+
246+ # Needed for postgresql
247+ mkdir $out/bin
248+ ln -s ${nixpkgs.bash}/bin/sh $out/bin/sh
249+ mkdir $out/etc
250+ echo 'nobody:x:99:99:Nobody:/:/sbin/nologin' >> $out/etc/passwd
251+ echo 'nobody:*:17416:0:99999:7:::' >> $out/etc/shadow
252+ echo 'nobody:x:99:' >> $out/etc/group
253+ echo 'nobody:::' >> $out/etc/gshadow
245254 '';
246255
247256 in nixpkgs.dockerTools.buildImage {
@@ -249,6 +258,9 @@ in rec {
249258 tag = version;
250259 contents = [ nixpkgs.iana-etc nixpkgs.cacert appDirSetupScript ] ++ extraContents;
251260 keepContentsDirlinks = true;
261+ extraCommands = ''
262+ chmod 1777 var/lib/backend
263+ '';
252264 config = {
253265 Env = [
254266 ("PATH=" + builtins.concatStringsSep(":")(extraPaths ++ [
@@ -261,7 +273,7 @@ in rec {
261273 Entrypoint = ["/var/lib/backend/backend"];
262274 WorkingDir = "/var/lib/backend";
263275 User = "99:99";
264− };
276+ } // config;
265277 };
266278
267279 serverExe = backend: frontend: assets: optimizationLevel: version:
@@ -380,8 +392,8 @@ in rec {
380392 exe = serverOn system dummyVersion;
381393 server = args@{ hostName, adminEmail, routeHost, enableHttps, version }:
382394 server (args // { exe = linuxExe version; });
383− dockerImage = args@{ name, version }:
384− dockerImage (args // { exe = linuxExe version; });
395+ dockerImage = args@{ name, version, ... }:
396+ dockerImage ({ exe = linuxExe version; } // args);
385397 obelisk = import (base + "/.obelisk/impl") {};
386398 };
387399 haskellPackageSets = {