I am testing docker with official doc. just following official doc. I am using official code
https://github.com/docker/getting-started/tree/master/app
and then this Dockerfile
# syntax=docker/dockerfile:1
FROM node:12-alpine
RUN apk add --no-cache python2 g make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
and then build command
docker build -t getting-started .
and then run command
docker run -dp 3000:3000 getting-started
It's perfect. but I just want to modified a little code more simple. like this. This is nodejs code.
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
and then Dockerfile like this
FROM node:12-alpine
WORKDIR /app
COPY . .
CMD ["node", "src/index.js"]
EXPOSE 3000
and then build and run same command. I checked my running container with this command "docker ps".I couldn't see my container is running.
I ran "docker ps -a" command. I was able to see the container with no port mapping container. So I wasn't able to connect my container.
I added both of docker state. I ran same command but firstcontainer don't have port mapping. What's wrong?
docker run -dp 80:3000 getting-started -> this is official app
docker run -dp 3000:3000 firstcontainer -> my simple app
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
fea13c68893f firstcontainer "docker-entrypoint.s…" 10 seconds ago Exited (1) 10 seconds ago
2f552d1e9f55 getting-started "docker-entrypoint.s…" 26 seconds ago Up 25 seconds
0.0.0.0:80->3000/tcp, :::80->3000/tcp
CodePudding user response:
You can run the docker command in foreground to see the logs (without the d flag):
docker run -p 3000:3000 firstcontainer -> my simple app
and see what's the error
CodePudding user response:
Your EXPOSE instruction is written after CMD. Change it to come before CMD. The CMD or ENTRYPOINT MUST be the last instruction in your Dockerfile. There is nothing to "run" in this image otherwise.
