英文:
Mysql in docker container doesn't accept credentials
问题
我有一个Dockerfile,之后我想将一些初始的SQL转储文件导入其中:
FROM mysql:debian
EXPOSE 3306
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["mysqld"]
然后是我的docker-compose.yaml
:
version: '3'
services:
mysql:
container_name: ${CONTAINER_NAME}
build:
context: .
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
我可以使用docker exec -it sqlcontainer mysql -uroot -p
成功进入我的容器(也可以使用$MYSQL_USER
),但当我尝试从外部执行相同的操作,例如 mysql -uroot -p
,我总是得到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
。
我想不出问题出在哪。容器内部与mysqld
的通信显然正常,否则我将不会收到任何响应。我在Windows上,如果这对任何人有帮助的话。但上述情况对PowerShell、CMD和甚至Git Bash都适用。
英文:
I have a Dockerfile which I later want to feed some initial sql dump into:
FROM mysql:debian
EXPOSE 3306
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["mysqld"]
Then there is my docker-compose.yaml
:
version: '3'
services:
mysql:
container_name: ${CONTAINER_NAME}
build:
context: .
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
I can docker exec -it sqlcontainer mysql -uroot -p
into my container just fine (works with the $MYSQL_USER
as well), but when I try to do the same from outside, e.g. with mysql -uroot -p
, I always get ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
.
I'm out of my wits. What am I doing wrong? The communication to mysqld
inside the container apparently works, otherwise I wouldn't get back any response.
I'm on Windows, if that's a hint for anyone. But the above is true for PowerShell, CMD and even Git Bash.
答案1
得分: 1
很尴尬地承认,但评论者 @RiggsFolly 和 @DavidMaze 都说得对:我已经有一段时间没有在我的机器上使用 MySQL 了。当我检查任务管理器时,我确实发现一个本地的 mysqld 进程已经在运行,当然使用了不同的凭据。在终止该进程(并在Compose文件中添加丢失的端口)后,我成功连接到了我的容器化实例。
希望这将来能帮助到其他人,他们在将来也会掉入同样的陷阱。
英文:
It is embarrassing to admit, but both commenters @RiggsFolly and @DavidMaze are right in what they said: I hadn't used MySQL for quite a while on my machine. When I checked the task manager, I indeed found a local mysqld running already, which of course was primed with different credentials. After killing the process (and adding the missing port in the compose file), I was able to connect to my containerized instance.
Hope this will help out somebody else in the future who falls into the same trap.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论