A Dockerfile describes how to construct an image from a base and a build context. COPY reads from that context, not from any arbitrary host path. Its destination belongs to the image filesystem. Set runtime metadata deliberately: ENV supplies defaults, EXPOSE documents a listening port and USER selects the runtime identity. None of those instructions starts a deployed service by itself. A build can succeed while copying the application into an unused directory, so inspect the artifact against its request. You'll build a small original preview image, then add one requirement at a time without losing its application file.