# Ship TODO ## Known Limitations ### Docker Container Port Assumption **Current behavior:** Ship assumes Docker containers listen on port 80 internally. **In:** `internal/templates/templates.go`: ``` -p 127.0.0.1:{{.Port}}:80 ``` **Problem:** Containers that expose other ports (e.g., 8080, 3000) will not work. **Workaround:** Ensure your Docker container listens on port 80, or manually edit the systemd unit after deployment. **Potential fixes:** 1. Add `--container-port` flag to specify internal port 2. Auto-detect from Dockerfile `EXPOSE` directive 3. Support `PORT` env var in Docker containers (like binary deploys) --- ## Other TODOs ### ship list should show custom domains **Problem:** `ship list` shows internal names (e.g., `ship-593a3d`) but not the actual custom domain mappings (e.g., `checkyourinfo.com`). **Desired:** Show the actual domain in the URL column when `--domain` was used. ### Port allocation collision bug **Problem:** Ship can allocate the same port to multiple deployments, causing containers to fail with exit code 125. **Example:** Both len.to and checkyourinfo.com were assigned port 9000. **Fix:** Check if port is actually in use before allocating. --- ### ship host init doesn't create local state.json **Problem:** After `ship host init`, the local `~/.config/ship/state.json` isn't created with the base_domain. Deploys fail with "HOST_NOT_CONFIGURED". **Workaround:** Manually create `~/.config/ship/state.json`: ```json { "default_host": "alaskav6", "hosts": { "alaskav6": { "next_port": 8001, "base_domain": "northwest.io", "apps": {} } } } ```