can't run react app with docker container
The problem is that the dev mode will not run if it is not an interactive terminal.
Change your docker command to include an interactive terminal:
Add -it
to your docker run
command (-i
interactive, -t
pseudo-TTY) e.g. docker run -it -p 3000:3000 your_container
Canonical troubleshooting
Make sure the code runs without docker
Does npm start
work on the command line?
Showing debug info
Add DEBUG=*
as an environment variable inside your container.DEBUG
is an environment variable which controls logging for many Node modules.
In your Dockerfile
, add
ENV DEBUG=*
Or on the command line, add -e 'DEBUG=*'
to your docker
command.
This may help spot error messages which are somehow getting swallowed
Run node directly
Instead of running npm start
, run your file directly.
e.g. in your Dockerfile
,
CMD ["node", "index.js"]
Try running another docker container
If this is a problem with your docker setup, running a known good container may help you discover it.
docker run --rm -it node:alpine
Improvements
Your Dockerfile
could also be simplified a bit.
FROM node:alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
CMD ["npm", "start"]
mkdir
is not needed, asWORKDIR
automatically creates the directory.package*.json
will also copypackage-lock.json
--production
will skip installingdevDependencies
- Putting full
COPY
command last will leverage cache better (you won't have to re-runnpm install
unless your dependencies have changed)
You might also want to use Tini. Tini forwards signals, which means docker stop
and pressing control+c in an interactive terminal will actually stop the node process immediately.
If you are using Docker 1.13+, add --init
to the command line to have signals forwarded and processes reaped. On older versions, follow the instructions in the README