Saya mempunyai bekas docker mysql yang ditulis menggunakan docker seperti ini:
versi: "3.3" perkhidmatan: db-server: nama_bekas: pangkalan data imej: mysql:terkini membina: dockerfile: ./Dockerfile persekitaran: MYSQL_ROOT_PASSWORD: rootTest MYSQL_USER: soumalya MYSQL_PASSWORD: userTest pelabuhan: - "3031:3306" rangkaian: - dalaman jilid: - mysql:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro mulakan semula: kecuali dihentikan rangkaian: dalaman: pemandu:jambatan jilid: mysql:
Saya menyambung ke localhost:3031 dengan kata laluan yang betul, tetapi ia memberi saya ralat ini:
Akses ditolak untuk pengguna 'root'@'172.19.0.1' (menggunakan kata laluan: YA)
Bagaimanakah saya boleh membetulkan ralat ini?
Saya memberikan kandungan Dockerfile di sini:
TAMBAH init.sql init.sql
Saya memberikan kandungan init. sql di sini:
buat pangkalan data jika tiada ulasan; cipta pangkalan data jika tidak wujud pengguna; cipta pangkalan data jika tidak wujud vendor; BERIKAN SEMUA KEISTIMEWAAN pada ulasan.* kepada 'soumalya'@'%'; BERIKAN SEMUA KEISTIMEWAAN kepada pengguna.* kepada 'soumalya'@'%'; BERIKAN SEMUA KEISTIMEWAAN kepada vendor.* kepada 'soumalya'@'%';
Daripada log kontena, saya dapat melihat bahawa pangkalan data sedang dimulakan dan menunggu sambungan masuk dalam port 3306.
Seperti yang dikatakan @HansKillan, saya menukar kata laluan apabila pangkalan data sudah wujud, kata laluan yang ditukar diabaikan, ia menggunakan kata laluan lama. Saya terpaksa menukar kata laluan pengguna saya secara manual dengan menulis arahan sql menggunakan docker exec... menggunakan arahan SQL untuk menukar kata laluan pengguna. Kemudian semuanya berjaya. Dalam kes anda, jika pangkalan data anda tidak mengandungi banyak data, maka anda hanya boleh memadamkan kelantangan dan mencipta semula bekas untuk memendekkan masa