로컬에서 mysql 도커에 연결할 수 없습니다.
도커 이미지에서 mysql 데이터베이스에 접속하려고 합니다.하지만 그것은 오류를 던지고 있다.
다음은 사용하고 있는 도커 이미지입니다.https://hub.docker.com/_/mysql/
도커 이미지를 실행하기 위해 사용한 명령어는 다음과 같습니다.
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8
의 출력을 다음에 나타냅니다.docker ps
명령어
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f35d2e39476 mysql:8 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp
도커 검사를 사용하여 IP를 확인하고 해당 IP에 ping을 실행하면 IP에 도달할 수 없음을 나타냅니다.
docker inspect 9f35d2e39476 | grep -i ipaddress
접속을 시도하면localhost
그리고.127.0.0.1
다음과 같은 에러가 발생.
인증 플러그인 'caching_sha2_password'를 로드할 수 없습니다.
우선 안정적이지 않은 소프트웨어를 사용하고 있으므로 릴리스와 예기치 않은 동작 사이에 큰 변화가 있을 수 있습니다.
편집 : 개발 종료, 2018년 4월 19일 안정판 출시
둘째, 컨테이너에 직접 ping할 수 없습니다. 컨테이너는 다른 네트워크에 있지만 다른 컨테이너를 사용하여 ping할 수 있습니다.
mysql 8 사용caching_sha2_password
기본 인증 플러그인으로 사용mysql_native_password
자세한 것은 이쪽.
많은 mysql 드라이버는 다음과 같은 지원을 추가하지 않았습니다.caching_sha2_password
아직.
문제가 있는 경우 다음과 같은 방법으로 이전 인증 플러그인으로 변경할 수 있습니다.
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
도커 컴포지트에서 기동할 때 수정 사항을 발견했습니다.
services:
db:
image: mysql
command: mysqld --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
즉, MySQL을 시작할 때 새 MySQL 암호/인증 메커니즘에서 복구합니다.
저도 같은 문제가 있었습니다만, mysql 8.X를 실행하고 있는 도커 컨테이너에서는 문제가 해결되지 않았습니다.컨테이너에 로그인했습니다.
docker exec -it CONTAINER_ID bash
다음으로 루트로 mysql에 로그인합니다.
mysql --user=root --password
root 비밀번호 입력(기본값은 'root') Finally Run:
ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
다 됐습니다.
이는 이미 답변이 끝난 상태입니다.게시
psychechemedia의 답변은 거의 효과가 있었습니다(win 10에서 새로 설치).그리고 제가 해야 할 아주 중요한 일이 한 가지 있습니다. 왜냐하면 이번이 제 첫 번째 시도가 아니었기 때문입니다.첨부한 데이터 폴더가 있는 경우, 제 예제 mysql 볼륨에서 먼저 이 폴더의 내용을 비우거나 삭제합니다.작업 중인 도커 구성 파일:
version: '3'
services:
mysql-development:
image: mysql:8.0.19
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: XXX
MYSQL_DATABASE: YYY
MYSQL_USER: ZZZ
MYSQL_PASSWORD: WWW
ports:
- "3306:3306"
- "33060:33060"
working_dir: /var/lib/mysql
volumes:
- "./mysql:/var/lib/mysql:rw"
- 도커 컴포지트 파일에서 환경 변수를 업데이트합니다.
- mysql 데이터 폴더 만들기(볼륨): mkdir mysql
- docker-compose 구문을 확인합니다.exe 설정
- 구축: 도커 구성.exe 빌드
- 실행: 도커 컴포지트.을 실행하다
터미널 자체를 사용하여 MySQL에 연결하려고 할 경우 빌드가 불안정할 수 있습니다.그러나 Sequel Pro와 같은 GUI 클라이언트를 사용하여 MySQL에 연결하려고 하면 MySQL 8의 새로운 인증 기능을 지원하지 않을 수 있습니다.
를 '도커 '로 시작합니다.--default-authentication-plugin=mysql_native_password
명령어를 실행하면 MySQL에서 기본값이 되어 오래된 인증을 사용합니다.
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 --default-authentication-plugin=mysql_native_password
위의 정보는 훌륭하지만, 여기 몇몇 사람들에게 도움이 될 만한 추가적인 생각이 있습니다.root
기본적으로는 계정은 원격으로 연결할 수 없습니다.이를 사용하려면 호스트 사용 권한을 포함해야 합니다. 8를 사용하고 에서는, 「8」(「8.0.25)」, 「8.0.25)을 .MYSQL_ROOT_HOST
8. 3.8의 docker-compose.yml
느낌이에요.
mysqldb:
image: $REPONAME/mysql:$MYSQLDB_VERSION
build:
context: ./docker/mysqldb
args:
MYSQLDB_VERSION: $MYSQLDB_VERSION
environment:
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: dbname
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
command: [mysqld, --default-authentication-plugin=mysql_native_password, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --innodb_monitor_enable=all, --max-connections=1001]
ports:
- 3306:3306
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 10s
retries: 10
MySQL 8.0을 사용하여 "caching_sha2_password plugin" 오류를 표시하지 않으려면 Docker에서 영구 데이터를 사용하여 MySQL 8.0을 설정하는 방법과 mysql_native_password를 사용하여 MySQL 8.0 컨테이너를 실행하는 방법에 대한 게시물을 확인하십시오.
즉, 로컬 "my.cnf" 구성 파일을 만들 수 있습니다.
$ sudo nano /usr/local/opt/mysql/config/my.cnf`
필요한 config 문을 추가합니다.
[mysqld]
default-authentication-plugin=mysql_native_password
그런 다음 해당 파일을 볼륨바인드로 "docker run" 스테이트먼트에 포함합니다.
$ docker run --restart always --name mysql8.0 -
v/usr/local/opt/mysql/8.0:/var/lib/mysql -v
/usr/local/opt/mysql/config:/etc/mysql/conf.d -p 3306:3306 -d -e
MYSQL_ROOT_PASSWORD=your_password mysql:8.0
다음 단계에 대한 자세한 내용은 여기를 참조하십시오.
https://medium.com/@crmcmullen/how-to-run-password-8-0-with-password-authentication-502de5gc661
이것은 해결된 것으로 생각되지만, 이것을 극복하기 위해 무엇이 필요한지 기록하고 싶었다.비슷한 문제가 있어서 이전 비밀번호 표준으로 되돌리는 것은 해결책이 되지 않았습니다.caching_sha2_password를 사용해야 했기 때문에 위의 명령어 중 하나를 사용해야 했습니다.
docker run -it --rm mysql mysql -h 172.31.116.20 -p -P6603
여기서 172.31.116.20은 컨테이너가 가동되고 있는 로컬 IP 주소이며, -P6603은 컨테이너가 가동하고 있는 포트입니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5092251b3dbf mysql "docker-entrypoint..." 16 minutes ago Up 16 minutes 33060/tcp, 0.0.0.0:6603->3306/tcp test1-mysql
MySQL 컨테이너용 도커 사이트에서 다음 솔루션을 찾았습니다.https://hub.docker.com/_/mysql/
"Connect to MySQL from the MySQL command line client" 섹션에 있습니다.
이것은 2022년 4월에 나에게 효과가 있었다.
- 데이터베이스 컨테이너 ID 가져오기
docker ps
- 다른 터미널 탭에서 db 컨테이너를 탭합니다.
docker exec -it RUNNING_DB_CONTAINER_ID_HERE bash
mysql --user=root --password
update mysql.user set host='%' where user='root';
flush privileges;
- Sequel Ace 등에서 mysql에 연결
host: 127.0.0.1
user: root
password: docker (as defined in your docker compose file)
Port: 4407 (as defined in your docker compose file)
참조용 도커 구성:
db:
container_name: docker_database
image: mysql/mysql-server:8.0.29
ports:
- "4407:3306"
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=docker
- MYSQL_DATABASE=your_database_here
- TZ=Europe/London
command: ['mysqld', '--default-authentication-plugin=mysql_native_password']
도커 파일
...
CMD ["mysqld", "--authentication-policy=mysql_native_password"]
..
사양대로
dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
--default-authentication-module이 삭제됩니다.
언급URL : https://stackoverflow.com/questions/49019652/not-able-to-connect-to-mysql-docker-from-local
'programing' 카테고리의 다른 글
이 외부 키 제약 조건이 잘못 형성된 이유는 무엇입니까? (0) | 2022.10.30 |
---|---|
Java Android 코드에서 string.xml 리소스 파일에 액세스합니다. (0) | 2022.10.29 |
nuxt js를 사용하여 모든 페이지에 글꼴을 삽입하는 방법 (0) | 2022.10.29 |
PHP set_time_limit()를 사용하여 nginx 504 게이트웨이 시간 초과 방지 (0) | 2022.10.29 |
Vue Router에서 앵커(북마크)를 처리하는 방법 (0) | 2022.10.29 |