본문 바로가기
[항해99]

배포 에러 해결 (dockerrun.aws.json수정)

by 프잘백 2022. 3. 28.
728x90

문제상황

git push - travis ci에서 인식 - 이미지 빌드 - Docker hub에 이미지 push 까지는 되지만 eb에 배포하는 과정에서 인스턴스에서의 커맨드가 실패한다.

travis CI 에서의 모습

 

Elastic Beanstalk 에서도 실패


수정

.travis.yml 파일에서 오류가 발생하는건가 싶어 구글링 후 수정, Dockerfile.dev 도 수정했다.

 

<.travis.yml>

language: node_js - node

branches:
  only:
  - main

services:
- docker

before_install:
- openssl aes-256-cbc -K $encrypted_3c84dcdc6bbe_key -iv $encrypted_3c84dcdc6bbe_iv
  -in .env.enc -out .env -d
- nvm install node

script:
- docker run -e CI=true --env-file .env tjddnjs7559/nemo_test npm run test

after_success:
- echo "TEST complete, sending image to hub..."
- docker build -t tjddnjs7559/nemo_test -f ./Dockerfile.dev .
- echo "$DOCKER_HUB_PASSWORD" | docker login -u "$DOCKER_HUB_ID" --password-stdin
- docker push tjddnjs7559/nemo_test

deploy:
- provider: elasticbeanstalk
  access_key_id: $AWS_ACCESS_KEY
  secret_access_key: $AWS_SECRET_ACCESS_KEY
  region: ap-northeast-2
  app: nemo_test
  env: Nemotest-env
  bucket_name: elasticbeanstalk-ap-northeast-2-291897759134
  skip_cleanup: true
  wait_until_deployed : true
  on:
    branch: main

 

<Dockerfile.dev>

# 노드를 베이스로 생성
FROM node:16.13.1

# app 디렉토리 , working 디렉토리 생성
RUN npm install -g nodemon
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install dependencies
COPY package*.json ./
RUN npm install

# Bundle app source
COPY . .

# Exports
EXPOSE 8088

 

---------

그래도 에러는 여전했다. 

분명 after_success: 까지는 유효한데 deploy가 안되는걸 보니 docker-compose 혹은 dockerrun.aws.json에 문제가 있다고 판단했고.. 주말 내도록 aws 공식문서를 차근차근 읽었다..🤬🤣🤬🤣

Docker 구성 - AWS Elastic Beanstalk (amazon.com)

 

Docker 구성 - AWS Elastic Beanstalk

두 파일은 루트에 있거나, .zip 아카이브의 최상위에 있어야 합니다. 파일을 포함하는 디렉터리에서 아카이브를 빌드하지 마십시오. 해당 디렉터리로 이동한 후 아카이브를 빌드하십시오. 두 파

docs.aws.amazon.com

 

그리고 문제점을 파악했다.

기존에는 서버와 db의 이미지를 만들고 각각 컨테이너에 담아 docker-compose로 띄우는데

AWS rds를 사용하면서 사용할 컨테이너가 하나로 줄어들면서 dockerrun.aws.json의 버전을 다운그레이드 했어야했다.

+ docker-compose를 사용할 필요가 없다.

그래서 docker-compose.yml 파일을 과감히 삭제했고, dockerrun.aws.json 파일을 수정했다.

 

<dockerrun.aws.json>

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "tjddnjs7559/nemo_test:latest",
    "Update": "true",
    "essential": false,
    "memory": 128
  },
  "Ports": [{ "ContainerPort": 8088 }]
}

travis CI 에서 deploy까지 잘 완료된 모습.

EB환경에서 배포까지 완료했다.

 

댓글