2017-05-16 4 views
1

나는 성공적으로 MySQL을 설치입니다gitlab CI : gitlab.yml에서 MySQL의 빌드 및 복원 DB 덤프

mysql_build: 
    stage: build 
    variables: 
    MYSQL_DATABASE: rates 
    MYSQL_ROOT_PASSWORD: root 
    services: 
    - mysql:latest 
    image: mysql 
    before_script: 
    - mysql --version 
    script: 
    - echo "SELECT 'OK';" | mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" --host=mysql "${MYSQL_DATABASE}" 
    - mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" rates < db/rates_db.sql 

을 가지고,하지만 난 다음 단계에 액세스하기위한 SQL 덤프 파일을 복원 할. 예외이 부분을 시작했을 때

, 내가 가진 :

- mysql --user=root --password="${MYSQL_ROOT_PASSWORD}" rates < db/rates_db.sql 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

실제 응용 프로그램은 내가 MySQL의에서 DB를 복원 할 수 있습니다 어떻게 여기

https://gitlab.com/armdev/exchange-rates

위치? 컨테이너를 처음 시작 신선한 예를

초기화

+0

MySQL의 서비스가 고정 표시기 컨테이너에서 실행 및 호스트 이름'mysql'에 액세스로 교체하십시오. mysql --user = root --password = "$ {MYSQL_ROOT_PASSWORD}"--host = mysql rates Jawad

+0

처음 mysql 명령을 사용했을 때 제대로했다. 그래서 그것을 추가하는 것을 잊어 버린 것 같습니다. – Jawad

+0

예, 고마워요 :) mysql 빌드는 괜찮습니다. jdbc : mysql : // localhost : 3306/rates에서 mysql에 대한 액세스 권한을 어떻게 변경해야합니까? jdbc : mysql : // mysql : 3306/rates? –

답변

2

는, 지정된 이름의 새 데이터베이스가 생성되어 제공되는 구성 변수로 초기화됩니다. 또한 /docker-entrypoint-initdb.d에있는 확장명이 .sh, .sql 및 .sql.gz 인 파일을 실행합니다. 파일은 알파벳순으로 실행됩니다. SQL 덤프를 해당 디렉토리에 마운트하고 사용자 정의 이미지에 제공된 데이터를 제공하여 mysql 서비스를 쉽게 채울 수 있습니다. SQL 파일은 기본적으로 MYSQL_DATABASE 변수로 지정된 데이터베이스로 임포트됩니다.

Dockerfile

FROM mysql 

ENV MYSQL_DATABASE rates 
ENV MYSQL_ROOT_PASSWORD root 

COPY db/rates_db.sql /docker-entrypoint-initdb.d/ 

이 gitlab-ci.yml

mysql_build: 
    stage: build 
    script: 
    - docker build . -t <Image name> 
+0

도움을 주셔서 감사합니다. 그리고 데이터베이스에 어떻게 액세스해야합니까? 이제 jdbc : mysql : // localhost : 3306/rates를 사용합니다. jdbc와 같은 도커 포트를 사용해야합니까? mysql : //192.168.99.104 : 3306/rates? –

+0

컨테이너와 java 응용 프로그램을 같은 서버에서 실행하는 경우 jdbc : mysql : //172.17.0.1 : 3306/rates를 수행해야합니다. 하지만 그렇지 않다면 서버의 ip를 추가하고 contanier가 ip를 확인하는지 확인해야합니다. – German