I have created a Dockerfile image with an easy react app boilerplate result of npx create-react-app my-app
FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 4000
CMD "npm" "start
Everything worked fine and created the image, started the container, no errors but cannot open on localhost, does anybody know what could be the problem ?
I have used docker run -p 4000:4000 -it react-repo
to start the container.
I have created a Dockerfile image with an easy react app boilerplate result of npx create-react-app my-app
FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 4000
CMD "npm" "start
Everything worked fine and created the image, started the container, no errors but cannot open on localhost, does anybody know what could be the problem ?
I have used docker run -p 4000:4000 -it react-repo
to start the container.
-
Could you provide the plete
docker run
mand used. I believe it might be a problem of exposed ports. – usuario Commented Sep 27, 2021 at 5:49 -
@usuario
docker run -p 4000:4000 -it react-repo
– mcmwhfy Commented Sep 27, 2021 at 5:52 - Have you configured the app to listen on port 4000? Looks like the the default is port 3000. – ogdenkev Commented Sep 27, 2021 at 6:13
-
Have you changed
package.json
to expose port 4000? – crissal Commented Sep 27, 2021 at 6:24 -
1
The
EXPOSE
instruction anddocker run -p 4000:4000
simply tell the docker daemon to expose a port from the container to the host. It does not ensure that anything inside the container is listening on that port. To do that, you have to set up your app to listen on port 4000. – ogdenkev Commented Sep 27, 2021 at 6:38
2 Answers
Reset to default 3A sample Docker file for below express.js app.
const express = require('express');
const PORT = 8080;
const HOST = '0.0.0.0';
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
To Run,
# docker run -p <host-port>:<container-port> imageName
docker run -p 8080:8080 imageName
Ismail's answer worked for me
#docker run -p : imageName docker run -p 8080:8080 imageName
deeper explanation: In my case I'm running it on ec2 instance where port 80 in the ec2 system is already alloted to something else. Hence, I can only assign my host port to another port, in my case i assigned it to 8080.
but, I don't want to access my api this way: http://x.x.x.x:8080/hotels
I wantd to access it direct to port 80, the port where websites are accessed, I want to access below way:
http://x.x.x.x/hotels
For above to work you need to below:
docker run -p 8080:80 imageName
Deeper explanation: In my aws operating system I'm still running it internally using port 8080. But when a client opens up my application through the operating system (pardon my pun) inside docker, I'm mapping the port to 80.
Hence, (pun) in the operating inside my container the app is accessed by an outside user through port 80 no problem. But internally when docker municates with the kernel inside the aws instance, it is still calling it from 8080.
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744856396a4597433.html
评论列表(0条)