인프런 커뮤니티 질문&답변

억수님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

08-06 Docker 패키징

mySql DB 는 생성하였는데 테이블이 생성이 안되는 경우가 어떤 게 있을 까요?

해결된 질문

작성

·

1.1K

0

윈도우로 하려니 참 수업이 쫒아가기 힘드네요.

어찌 어찌 구글링으로 계속 진행하고 있는데요.

  1. 도커로 올린 후 DB 는 생성을 했는데 테이블 생성이 안되네요.

 2. localhost:4000 로 접속을 하면 화면이 보이지도 않구요.

아..도커 참 그렇네요. ^^:

 

이것 저것 손 댄 코드 입니다.

 

14 버전이 안되어서 16버전으로 변경

# 컴퓨터 만드는 설명서

# 1. 운영체제 설치(node 14버전과 npm과 yarn이 모두 설치되어있는 리눅스)
FROM node:16

# 2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기
COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
WORKDIR /myfolder/
RUN yarn install

COPY . /myfolder/

# 3. 도커안에서 index.js 실행시키기
CMD yarn start:dev

 

DB 포트 충돌로 3307번 확인 후 3306 번 접근

version: '3.7'

services:
  my-backend:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./src:/myfolder/src
    ports:
      - 4000:3000
    env_file:
      - ./.env.docker


  my-database:
    platform: linux/x86_64
    image: mysql:latest
    environment:
      MYSQL_DATABASE: 'mydocker'
      MYSQL_ROOT_PASSWORD: '0000'
    ports:
      - 3307:3306

 

 

 

도움 좀 부탁드립니다.

답변 2

0

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! 억수님!

  1. 해당 문제는 typeorm의 작동에 문제가 있는 것으로 판단이 됩니다!


    도커는 제대로 실행되었기 때문에 데이터베이스는 생성이 되었으나, typeorm이 제대로 해당 데이터베이스에 접속하여 테이블을 생성해주고 있지 못하기 때문이죠!


    따라서, typeorm의 접속정보를 다시 한 번 체크 부탁드려요!
    docker-compose를 통해 내부 도커들간의 통신은 localhost가 아니라, 네임리졸루션을 통하여 도커컴퓨터 이름으로 접속하게 되므로 typeorm의 접속정보가host:'localhost' => host:'my-database'로의 변경이 되어있는지 확인해 주세요!
    포트의 경우 3307:3306 으로 노출되어있더라도, 내 컴퓨터에서 도커안에 접속할 때는 3307이겠지만, 도커들간에 네임리졸루션시는 밖에서 들어오는 것이 아니므로 포트포워딩이 상관 없으며, 따라서 3306으로 접속합니다
    이에 따라 포트는, port:3306 이 되겠네요!^^

     

  2. localhost:4000으로 접속하신 부분에 대해서는 잘 하신 것 같아요!
    이유는 포트포워딩을 4000:3000으로 하셔서, 현재 4000번이 노출되고 있기 때문입니다!
    그렇다면 localhost:4000으로 접속하였을 때, 도커 컴퓨터에 접속이 되고, 이 도커 컴퓨터 내부에서 실행중인 3000번 포트의 프로그램에까지 접속이 전달 되어야 하는데, 최종 화면이 안보이는 이유는 도커 컴퓨터 내부에서 3000번 포트로 실행중이어야할 프로그램이 다른 포트로 실행되고 있는 것은 아닌지 점검이 필요할 것 같아요!
    만약, 3000번 포트로 제대로 작성되어 있다면, 현재 내 컴퓨터의 소스코드에는 3000번으로 수정되어있지만, build를 다시 해야 도커 내부에 들어가게 되므로, 재빌드 부분도 점검이 필요할 것 같아요!^^

0

안녕하세요, 인프런 AI 인턴이에요.

MySQL 데이터베이스를 생성했지만 테이블이 생성되지 않는 경우 몇 가지 가능한 원인이 있을 수 있습니다. 몇 가지 확인사항을 제시해 드릴게요.

  1. SQL 문법 오류: 테이블을 생성할 때 문법 오류가 발생했을 수 있습니다. 정확한 SQL 문법을 사용했는지 확인해보세요. CREATE TABLE 문을 실행할 때 필요한 필드, 데이터 타입, 제약 조건 등을 정확히 입력해야 합니다.

  2. 권한 부족: 데이터베이스 사용자에게 테이블을 생성할 수 있는 권한이 없을 수 있습니다. 데이터베이스 사용자가 해당 권한을 가지고 있는지 확인해보세요. 필요한 권한이 없다면 GRANT 문을 사용하여 권한을 추가해야 합니다.

  3. 데이터베이스 연결 오류: MySQL 데이터베이스에 정상적으로 연결되었는지 확인해보세요. 올바른 호스트, 포트, 사용자 이름, 비밀번호를 사용하여 연결하고 있는지 확인해야 합니다. 화면이 보이지 않는다는 것은 데이터베이스 연결이 성공적으로 이루어지지 않았을 가능성이 있습니다.

  4. 이미 생성된 테이블: 이미 해당 이름의 테이블이 존재하는 경우에는 동일한 이름으로 다시 테이블을 생성할 수 없습니다. 다른 이름으로 테이블을 생성하거나, 이미 존재하는 테이블을 수정해야 할 수 있습니다.

위의 사항들을 체크해 보시고 문제를 해결해보세요. 추가로, 도커 환경에서 로컬로 접속할 수 없는 이유는 치명적인 오류일 수 있으므로 빠른 시일 내에 해결하는 것이 좋습니다.

더 자세한 도움이 필요하시다면, 질문에 사용하신 코드와 함께 추가 정보를 알려주시면 더 정확한 답변을 드릴 수 있을 것 같아요. 감사합니다!

억수님의 프로필 이미지

작성한 질문수

질문하기