Mac OS X에서 실행 중이며 이러한 지침을 사용하여 프록시를 통해 Cloud SQL 인스턴스에 연결하려고했습니다 . MySQL 클라이언트, gce-proxy 컨테이너를 설치하고 Google Cloud Platform에서 서비스 계정을 만든 후에는 문서에 지정된 다음 두 명령을 실행합니다.
docker run -d -v /cloudsql:/cloudsql \
-v [LOCAL_CERTIFICATE_FILE_PATH]:[LOCAL_CERTIFICATE_FILE_PATH] \
b.gcr.io/cloudsql-docker/gce-proxy /cloud_sql_proxy \
-instances=[INSTANCE_CONNECTION_NAME]=tcp:3306 -credential_file=[CLOUD_KEY_FILE_PATH]
mysql -h127.0.0.1 -uroot -p
첫째, 컨테이너가 포트를 노출하지 않기 때문에 이것이 어떻게 작동 해야하는지 이해하지 못합니다. 그래서 당연히 연결을 시도했을 때 MySQL 클라이언트에서 다음 오류가 발생합니다.
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
내가 추가하여 포트를 노출 할 경우 그러나 -p 3306:3306
받는 docker run
명령을, 난 여전히 연결할 수 없습니다. 대신 MySQL 클라이언트에서 다음 오류가 발생합니다.
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
해당 문서cloud_sql_proxy
에 따라 도커 호스트 컴퓨터에서 실행되는 프록시에 성공적으로 연결 되었으므로 내 자격 증명 파일과 mysql 클라이언트가 올바르게 구성되어 있다고 확신합니다. 컨테이너의 로그에는 연결이 시도되었다고 표시되지 않습니다. 도커를 통해 일반 mysql 컨테이너에 연결하는 데 문제가 없습니다. 내가 여기서 무엇을 놓치고 있습니까?
@Vadim의 제안을 시도했는데 기본적으로 다음과 같습니다.
docker run -d -v /cloudsql:/cloudsql \
-p 127.0.0.1:3306:3306 \
-v [LOCAL_CERTIFICATE_FILE_PATH]:[LOCAL_CERTIFICATE_FILE_PATH] \
b.gcr.io/cloudsql-docker/gce-proxy /cloud_sql_proxy \
-instances=[INSTANCE_CONNECTION_NAME]=tcp:0.0.0.0:3306 -credential_file=[CLOUD_KEY_FILE_PATH]
이 오류가 계속 발생하여 여전히 연결할 수 없습니다.
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
그러나 도커 컨테이너의 로그에는 다음과 같은 연결이 표시되었습니다.
2016/10/16 07:52:32 New connection for "[INSTANCE_CONNECTION_NAME]"
2016/10/16 07:52:32 couldn't connect to "[INSTANCE_CONNECTION_NAME]": Post https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_NAME]/instances/[CLOUD_SQL_INSTANCE_NAME]/createEphemeral?alt=json: oauth2: cannot fetch token: Post https://accounts.google.com/o/oauth2/token: x509: failed to load system roots and no roots provided
이제 트래픽을받는 것처럼 보였지만 SSL 컨테이너에 대한 인증서를 찾지 못했습니다. OpenSSL의 cert.pem
내 인증서 내보내기를 사용 하여 Docker 컨테이너의 동일한 위치에 마운트했습니다. 임의의 매핑이 [LOCAL_CERTIFICATE_FILE_PATH]:[LOCAL_CERTIFICATE_FILE_PATH]
프록시가 인증서의 위치를 파악하는 데 도움이되지 않았다는 것은 의미 가 있습니다. 그래서이 Kubernetes 설정 가이드 의 단서를 사용 하여 마운트 된 볼륨을 -v [LOCAL_CERTIFICATE_FILE_PATH]:/etc/ssl/certs
. 자비 롭게도 효과가있었습니다.
요약 -다음은 Docker 컨테이너가 TCP를 통해 실행되도록하는 최종 구문입니다.
docker run -d \
-p 127.0.0.1:3306:3306 \
-v [SERVICE_ACCOUNT_PRIVATE_KEY_DIRECTORY]:[SERVICE_ACCOUNT_PRIVATE_KEY_DIRECTORY] \
-v [LOCAL_CERTIFICATE_DIRECTORY]:/etc/ssl/certs \
b.gcr.io/cloudsql-docker/gce-proxy /cloud_sql_proxy \
-instances=[INSTANCE_CONNECTION_NAME]=tcp:0.0.0.0:3306 \
-credential_file=[SERVICE_ACCOUNT_PRIVATE_KEY_JSON_FILE]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다