AWS(Linux)를 이용해 Node.js의 무중단 배포 환경을 구성하며 경험한 Docker 오류
os : linux (AMI : amzn-ami-hvm-2018.03.0.20200206.0-x86_64-gp2 (ami-0ecd78c22823e02ef))
docker version : 19.03.6-ce, build 369ce74
docker-compose version : 1.23.2, build 1110ad01
Node.js verions : v12.16
# Dockerfile
FROM node:12.16
MAINTAINER
VOLUME ["/tp/TP_nodejs"]
COPY ./tp/TP_nodejs/package.json /tp/TP_nodejs/
COPY ./start-server.sh /usr/local/bin
RUN ln -s /usr/local/bin/start-server.sh /start-server.sh
CMD ["start-server.sh"]
# docker-compose.yml
version: '2'
services:
TP_nodejs:
image: tp_nodejs-image
volumes:
- /home/ec2-user/docker-image/tp/TP_nodejs:/tp/TP_nodejs
ports:
- "3000:3000"
# start-server.sh
#!/bin/bash
cd /tp/TP_nodejs
yarn install
yarn start
// app.js
const express = require('express');
const app = express();
const options = {
host: "127.0.0.1",
port: 3000
}
app.get("/", (req, res) => res.send("hello world!"));
app.listen(options, () => console.log(`http://${options.host}:${options.port}`));
docker ps와 docker logs로 확인해도 정상적으로 작동중인 것을 확인 할 수 있는데, 정상적으로 접속되는지 테스트 하면 접속이 되질 않는다.
docker를 처음 사용하다보니 뭐가 문제인지 잘 몰랐다. 서버는 정상적으로 작동하니 docker 문제라고 생각했고 Dockerfile과 docker-compose.yml 두개의 파일 문제로 작동이 안되는 줄 알고 docker를 재설치 해보고 몇시간동안 삽질하다가 스택오버플로우에서 관련된 글을 발견했고 아주 쉽게 해결했다.
app.js에서 options로 설정한 host를 "127.0.0.1"에서 "0.0.0.0"으로 변경해주면 해결된다. (내 시간 ㅠㅠ)
저도 같은 증상 겪다가 포스팅덕에 쉽게 해결했네요ㅠ 감사합니다!