해결된 질문
작성
·
1.1K
0
윈도우로 하려니 참 수업이 쫒아가기 힘드네요.
어찌 어찌 구글링으로 계속 진행하고 있는데요.
도커로 올린 후 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
안녕하세요! 억수님!
해당 문제는 typeorm의 작동에 문제가 있는 것으로 판단이 됩니다!
도커는 제대로 실행되었기 때문에 데이터베이스는 생성이 되었으나, typeorm이 제대로 해당 데이터베이스에 접속하여 테이블을 생성해주고 있지 못하기 때문이죠!
따라서, typeorm의 접속정보를 다시 한 번 체크 부탁드려요!
docker-compose를 통해 내부 도커들간의 통신은 localhost가 아니라, 네임리졸루션을 통하여 도커컴퓨터 이름으로 접속하게 되므로 typeorm의 접속정보가host:'localhost' => host:'my-database'
로의 변경이 되어있는지 확인해 주세요!
포트의 경우 3307:3306 으로 노출되어있더라도, 내 컴퓨터에서 도커안에 접속할 때는 3307이겠지만, 도커들간에 네임리졸루션시는 밖에서 들어오는 것이 아니므로 포트포워딩이 상관 없으며, 따라서 3306으로 접속합니다
이에 따라 포트는, port:3306
이 되겠네요!^^
localhost:4000으로 접속하신 부분에 대해서는 잘 하신 것 같아요!
이유는 포트포워딩을 4000:3000으로 하셔서, 현재 4000번이 노출되고 있기 때문입니다!
그렇다면 localhost:4000으로 접속하였을 때, 도커 컴퓨터에 접속이 되고, 이 도커 컴퓨터 내부에서 실행중인 3000번 포트의 프로그램에까지 접속이 전달 되어야 하는데, 최종 화면이 안보이는 이유는 도커 컴퓨터 내부에서 3000번 포트로 실행중이어야할 프로그램이 다른 포트로 실행되고 있는 것은 아닌지 점검이 필요할 것 같아요!
만약, 3000번 포트로 제대로 작성되어 있다면, 현재 내 컴퓨터의 소스코드에는 3000번으로 수정되어있지만, build를 다시 해야 도커 내부에 들어가게 되므로, 재빌드 부분도 점검이 필요할 것 같아요!^^
0
안녕하세요, 인프런 AI 인턴이에요.
MySQL 데이터베이스를 생성했지만 테이블이 생성되지 않는 경우 몇 가지 가능한 원인이 있을 수 있습니다. 몇 가지 확인사항을 제시해 드릴게요.
SQL 문법 오류: 테이블을 생성할 때 문법 오류가 발생했을 수 있습니다. 정확한 SQL 문법을 사용했는지 확인해보세요. CREATE TABLE 문을 실행할 때 필요한 필드, 데이터 타입, 제약 조건 등을 정확히 입력해야 합니다.
권한 부족: 데이터베이스 사용자에게 테이블을 생성할 수 있는 권한이 없을 수 있습니다. 데이터베이스 사용자가 해당 권한을 가지고 있는지 확인해보세요. 필요한 권한이 없다면 GRANT 문을 사용하여 권한을 추가해야 합니다.
데이터베이스 연결 오류: MySQL 데이터베이스에 정상적으로 연결되었는지 확인해보세요. 올바른 호스트, 포트, 사용자 이름, 비밀번호를 사용하여 연결하고 있는지 확인해야 합니다. 화면이 보이지 않는다는 것은 데이터베이스 연결이 성공적으로 이루어지지 않았을 가능성이 있습니다.
이미 생성된 테이블: 이미 해당 이름의 테이블이 존재하는 경우에는 동일한 이름으로 다시 테이블을 생성할 수 없습니다. 다른 이름으로 테이블을 생성하거나, 이미 존재하는 테이블을 수정해야 할 수 있습니다.
위의 사항들을 체크해 보시고 문제를 해결해보세요. 추가로, 도커 환경에서 로컬로 접속할 수 없는 이유는 치명적인 오류일 수 있으므로 빠른 시일 내에 해결하는 것이 좋습니다.
더 자세한 도움이 필요하시다면, 질문에 사용하신 코드와 함께 추가 정보를 알려주시면 더 정확한 답변을 드릴 수 있을 것 같아요. 감사합니다!