diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,12 @@
+propellor (0.9.1) unstable; urgency=medium
+
+  * Docker: Add ability to control when containers restart.
+  * Docker: Default to always restarting containers, so they come back 
+    up after reboots and docker daemon upgrades.
+  * Fix loop when a docker host that does not exist was docked.
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 24 Oct 2014 09:57:31 -0400
+
 propellor (0.9.0) unstable; urgency=medium
 
   * Avoid encoding the current stable suite in propellor's code,
diff --git a/config-joey.hs b/config-joey.hs
--- a/config-joey.hs
+++ b/config-joey.hs
@@ -53,7 +53,6 @@
 	& Apt.buildDep ["git-annex"] `period` Daily
 	& Docker.configured
 	! Docker.docked hosts "android-git-annex"
-	! Docker.docked hosts "webserver"
 
 clam :: Host
 clam = standardSystem "clam.kitenet.net" Unstable "amd64"
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+propellor (0.9.1) unstable; urgency=medium
+
+  * Docker: Add ability to control when containers restart.
+  * Docker: Default to always restarting containers, so they come back 
+    up after reboots and docker daemon upgrades.
+  * Fix loop when a docker host that does not exist was docked.
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 24 Oct 2014 09:57:31 -0400
+
 propellor (0.9.0) unstable; urgency=medium
 
   * Avoid encoding the current stable suite in propellor's code,
diff --git a/debian/control b/debian/control
--- a/debian/control
+++ b/debian/control
@@ -19,7 +19,7 @@
 Maintainer: Joey Hess <joeyh@debian.org>
 Standards-Version: 3.9.5
 Vcs-Git: git://git.kitenet.net/propellor
-Homepage: http://joeyh.name/code/propellor/
+Homepage: http://propellor.branchable.com/
 
 Package: propellor
 Architecture: any
diff --git a/propellor.cabal b/propellor.cabal
--- a/propellor.cabal
+++ b/propellor.cabal
@@ -1,5 +1,5 @@
 Name: propellor
-Version: 0.9.0
+Version: 0.9.1
 Cabal-Version: >= 1.6
 License: BSD3
 Maintainer: Joey Hess <joey@kitenet.net>
diff --git a/src/Propellor/Info.hs b/src/Propellor/Info.hs
--- a/src/Propellor/Info.hs
+++ b/src/Propellor/Info.hs
@@ -80,7 +80,10 @@
 	map (\h -> map (\aka -> (aka, h)) $ S.toList $ _aliases $ hostInfo h)
 
 findHost :: [Host] -> HostName -> Maybe Host
-findHost l hn = maybe (findAlias l hn) Just (M.lookup hn (hostMap l))
+findHost l hn = maybe (findAlias l hn) Just (findHostNoAlias l hn)
+
+findHostNoAlias :: [Host] -> HostName -> Maybe Host
+findHostNoAlias l hn = M.lookup hn (hostMap l)
 
 findAlias :: [Host] -> HostName -> Maybe Host
 findAlias l hn = M.lookup hn (aliasMap l)
diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs
--- a/src/Propellor/Property.hs
+++ b/src/Propellor/Property.hs
@@ -135,7 +135,7 @@
 --
 -- Can add Properties and RevertableProperties
 (&) :: IsProp p => Host -> p -> Host
-(Host hn ps as) & p = Host hn (ps ++ [toProp p]) (as <> getInfo p)
+(Host hn ps is) & p = Host hn (ps ++ [toProp p]) (is <> getInfo p)
 
 infixl 1 &
 
@@ -144,6 +144,14 @@
 h ! p = h & revert p
 
 infixl 1 !
+
+-- | Like (&), but adds the property as the first property of the host.
+-- Normally, property order should not matter, but this is useful
+-- when it does.
+(&^) :: IsProp p => Host -> p -> Host
+(Host hn ps is) &^ p = Host hn ([toProp p] ++ ps) (getInfo p <> is)
+
+infixl 1 &^
 
 -- Changes the action that is performed to satisfy a property. 
 adjustProperty :: Property -> (Propellor Result -> Propellor Result) -> Property
diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs
--- a/src/Propellor/Property/Docker.hs
+++ b/src/Propellor/Property/Docker.hs
@@ -19,7 +19,6 @@
 	-- * Container configuration
 	dns,
 	hostname,
-	name,
 	publish,
 	expose,
 	user,
@@ -30,6 +29,9 @@
 	cpuShares,
 	link,
 	ContainerAlias,
+	restartAlways,
+	restartOnFailure,
+	restartNever,
 	-- * Internal use
 	chain,
 ) where
@@ -106,7 +108,7 @@
 		let cid = ContainerId hn cn
 		ensureProperties [findContainer mhost cid cn $ a cid]
 		
-	mhost = findHost hosts (cn2hn cn)
+	mhost = findHostNoAlias hosts (cn2hn cn)
 
 	setup cid (Container image runparams) =
 		provisionContainer cid
@@ -150,14 +152,18 @@
 mkContainer :: ContainerId -> Host -> Maybe Container
 mkContainer cid@(ContainerId hn _cn) h = Container
 	<$> fromVal (_dockerImage info)
-	<*> pure (map (\a -> a hn) (_dockerRunParams info))
+	<*> pure (map (\mkparam -> mkparam hn) (_dockerRunParams info))
   where
 	info = _dockerinfo $ hostInfo h'
 	h' = h
-		-- expose propellor directory inside the container
+		-- Restart by default so container comes up on
+		-- boot or when docker is upgraded.
+		&^ restartAlways
+		-- Expose propellor directory inside the container.
 		& volume (localdir++":"++localdir)
-		-- name the container in a predictable way so we
-		-- and the user can easily find it later
+		-- Name the container in a predictable way so we
+		-- and the user can easily find it later. This property
+		-- comes last, so it cannot be overridden.
 		& name (fromContainerId cid)
 
 -- | Causes *any* docker images that are not in use by running containers to
@@ -217,7 +223,7 @@
 hostname :: String -> Property
 hostname = runProp "hostname"
 
--- | Set name for container. (Normally done automatically.)
+-- | Set name of container.
 name :: String -> Property
 name = runProp "name"
 
@@ -273,6 +279,25 @@
 -- | A short alias for a linked container.
 -- Each container has its own alias namespace.
 type ContainerAlias = String
+
+-- | This property is enabled by default for docker containers configured by
+-- propellor; as well as keeping badly behaved containers running,
+-- it ensures that containers get started back up after reboot or
+-- after docker is upgraded.
+restartAlways :: Property
+restartAlways = runProp "restart" "always"
+
+-- | Docker will restart the container if it exits nonzero.
+-- If a number is provided, it will be restarted only up to that many
+-- times.
+restartOnFailure :: Maybe Int -> Property
+restartOnFailure Nothing = runProp "restart" "on-failure"
+restartOnFailure (Just n) = runProp "restart" ("on-failure:" ++ show n)
+
+-- | Makes docker not restart a container when it exits
+-- Note that this includes not restarting it on boot!
+restartNever :: Property
+restartNever = runProp "restart" "no"
 
 -- | A container is identified by its name, and the host
 -- on which it's deployed.
diff --git a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
--- a/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
+++ b/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
@@ -65,6 +65,7 @@
 buildDepsApt :: Property
 buildDepsApt = combineProperties "gitannexbuilder build deps"
 	[ Apt.buildDep ["git-annex"]
+	, Apt.installed ["liblockfile-simple-perl"]
 	, buildDepsNoHaskellLibs
 	, "git-annex source build deps installed" ==> Apt.buildDepIn builddir
 	]
@@ -113,17 +114,14 @@
 	& os osver
 	& Apt.stdSourcesList
 	& Apt.installed ["systemd"]
+	& Docker.tweaked
 	& User.accountFor builduser
 	& File.dirExists gitbuilderdir
 	& File.ownerGroup homedir builduser builduser
-	& buildDepsNoHaskellLibs
+	& buildDepsApt
 	& flagFile chrootsetup ("/chrootsetup")
 		`requires` setupgitannexdir
-	& Docker.tweaked
-	-- TODO: automate installing haskell libs
-	-- (Currently have to run
-	-- git-annex/standalone/android/install-haskell-packages
-	-- which is not fully automated.)
+	& flagFile haskellpkgsinstalled ("/haskellpkgsinstalled")
   where
 	-- Use git-annex's android chroot setup script, which will install
 	-- ghc-android and the NDK, all build deps, etc, in the home
@@ -131,7 +129,10 @@
 	chrootsetup = scriptProperty
 		[ "cd " ++ gitannexdir ++ " && ./standalone/android/buildchroot-inchroot"
 		]
-	osver = System (Debian (Stable "wheezy")) "i386"
+	haskellpkgsinstalled = userScriptProperty "builder"
+		[ "cd " ++ gitannexdir ++ " && ./standalone/android/install-haskell-packages"
+		]
+	osver = System (Debian Testing) "i386" -- once jessie is released, use: (Stable "jessie")
 
 -- armel builder has a companion container using amd64 that
 -- runs the build first to get TH splices. They need
diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs
--- a/src/Propellor/Property/SiteSpecific/JoeySites.hs
+++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs
@@ -72,7 +72,7 @@
 oldUseNetShellBox :: Property
 oldUseNetShellBox = propertyList "olduse.net shellbox"
 	[ oldUseNetInstalled "oldusenet"
-	, Service.running "oldusenet"
+	, Service.running "shellinabox"
 	]
 
 oldUseNetInstalled :: Apt.Package -> Property
