无法连接到MySQL Docker容器

3
我有一个MySQL容器的问题,无法连接到容器。
这是我的docker-compose.yml文件。
apache:
build: ./
ports:
    - 1814:80
volumes:
    - ./code:/app
links:
    - db
environment:
    - APACHE_SERVER_NAME=local.dev
    - PHP_SHORT_OPEN_TAG=On
    - PHP_ERROR_REPORTING=E_ALL
    - PHP_DISPLAY_ERRORS=On
    - PHP_HTML_ERRORS=On

db:
image: mysql:5.6
ports:
    - "3333:3306"
volumes:
    - /var/lib/mysql
environment:
    MYSQL_ROOT_PASSWORD: admin
    MYSQL_DATABASE: app

我使用docker-compose up -d --build命令来运行。

之后,我使用docker ps命令来查看正在运行的容器。

https://i.imgsafe.org/3caf28c5f0.png

然后,我使用docker exec -it mddev_apache_1 /bin/bash命令在mddev_apache_1容器中运行交互式shell。

但是当我尝试连接到MySQL时,它被拒绝了。

https://i.imgsafe.org/3ccfde1f73.png

有任何想法为什么我无法连接到MySQL容器吗?

谢谢。

==================================================

更新

我将我的docker-compose.yml更改为:

version: '2'

services:
apache:
    build: ./
    container_name: web-server
    ports:
        - 1814:80
    volumes:
        - ./code:/app
    links:
        - db
    environment:
        - APACHE_SERVER_NAME=local.dev
        - PHP_SHORT_OPEN_TAG=On
        - PHP_ERROR_REPORTING=E_ALL
        - PHP_DISPLAY_ERRORS=On
        - PHP_HTML_ERRORS=On
    networks:
        report:
            aliases:
                - web-server
db:
    image: mysql:5.6
    container_name: database
    ports:
        - "3333:3306"
    volumes:
        - /var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: admin
        MYSQL_DATABASE: app
    networks:
        report:
            aliases:
                - database

networks:
report:
    driver: bridge

但我仍然无法连接到我的MySQL容器。
我尝试检查我的网络和容器。
mddev_report网络检查:http://i.imgsafe.org/4eae17a27f.png
web-server容器检查:http://i.imgsafe.org/4ec74e5d52.png
database容器检查:http://i.imgsafe.org/4ecb129d2d.png

你使用的是哪个版本的Compose?除了“default”之外,你还使用了其他网络吗? - Jite
docker-compose 版本 1.8.0,构建 f3628c7。不,我没有使用任何网络。 - Friandy
抱歉,关于compose.yml文件中的(version: 'x'),呵呵。 - Jite
哦,我在compose.yml中没有使用version参数。必须使用version吗? - Friandy
嗯,如果您的容器已经启动,我猜它应该是没有问题的。不过我不确定它默认设置为什么!请对 mddev_default 网络和您的容器进行检查(docker inspect mddev_defaultdocker inspect mddev_apache_1docker inspect mddev_db_1),确保两个容器都在同一个网络(default)上,并且拥有您期望的别名。 - Jite
@Jite,我刚刚对上面我的docker-compose.yml文件进行了一些更新。你可以检查一下吗? - Friandy
3个回答

2
您的mysql容器将端口3306暴露给其网络,同时将其端口3306映射到主机的3333端口。
当您使用ports属性时,将端口映射到本地主机,而不是网络上的其他容器。
web-server容器内部,您应该能够通过mysql -uroot -padmin -h database -P 3306连接到mysql服务器,而从您的主机,则可以使用mysql -uroot -padmin -h localhost -P 3333

0

你正在将你的Docker连接到数据库...我认为数据库无效或已更改其IP地址...所以你需要停止你的MySQL Docker,提交并删除它,然后尝试再次运行新的镜像。

如果它失败了,而不是在分离模式下运行它(-d),你可以在交互模式下运行它(-it),以查看运行时是否发生异常。


我刚刚更新了我上面提到的 docker-compose.yml 文件,你可以检查一下吗? - Friandy

0

我遇到了类似的问题,但是被批准的答案对我没有用。

有效的方法是修剪 Docker 容器:

docker system prune -a 这将清除与未使用容器相关联的所有数据

之后,我运行了docker compose up --build,并且能够连接到 mysql 容器而没有任何问题(使用 127.0.0.1 作为主机,3333 作为端口)。 我的.yml文件略有不同。

关于修剪的其他信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接