我使用默认的mysql映像作为具有docker compose的多容器应用程序中的一个容器。我最近开始看到每秒都会记录一条定期消息。消息是:
[Note] Access denied for user 'root'@'localhost' (using password: NO)
并以时间戳开头。 docker-compose.yml中的服务配置如下:
image: "mysql:5.7.18"
command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --port=$MYSQL_CONTAINER_PORT]
expose:
- "${MYSQL_CONTAINER_PORT}"
volumes:
- ${MYSQL_DATA}:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
ports:
- "${MYSQL_HOST_PORT}:${MYSQL_CONTAINER_PORT}"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 5s
retries: 10
我在构建容器映像时故意设置root密码,应用程序可以通过我通过环境部分设置的用户名和密码来访问数据库。
我的应用程序中没有任何内容应该尝试以root用户身份访问mysql映像,是否有任何想法可以找出这些尝试以root用户身份登录而没有密码?
如果有帮助,docker-compose.yml文件将设置为2.1版。另外两个容器是(1)烧瓶应用程序,以及(2)nginx Web服务器,它也是应用程序的代理服务器。
答案 0 :(得分:1)
您的问题出在healthcheck命令中,Docker尝试使用没有密码的root用户执行命令:
image: "mysql:5.7.18"
command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --port=$MYSQL_CONTAINER_PORT]
expose:
- "${MYSQL_CONTAINER_PORT}"
volumes:
- ${MYSQL_DATA}:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
ports:
- "${MYSQL_HOST_PORT}:${MYSQL_CONTAINER_PORT}"
healthcheck:
test: ["CMD", "mysqladmin", "-u$MYSQL_USER", "-p$MYSQL_PASSWORD", "ping", "-h", "localhost"]
timeout: 5s
retries: 10