无法连接到MySQL泊坞窗容器

时间:2017-05-23 05:50:50

标签: mysql docker

我的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/bashmddev_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容器。

http://i.imgsafe.org/4eb89f3857.png

我尝试检查我的网络和容器。

mddev_report网络检查:http://i.imgsafe.org/4eae17a27f.png

web-server容器检查:http://i.imgsafe.org/4ec74e5d52.png

database容器检查:http://i.imgsafe.org/4ecb129d2d.png

2 个答案:

答案 0 :(得分:2)

您的mysql容器将端口 3306 暴露给其网络,同时将其端口3306映射到主机3333端口。
当您使用ports属性时,您将端口映射到localhost,而不是网络上的其他容器。

web-server容器内部,您应该能够通过mysql -uroot -padmin -h database -P 3306通过mysql -uroot -padmin -h localhost -P 3333连接到mysql服务器,而您可以从主机使用<div class="collapse navbar-collapse" id="navbarsExampleDefault"> <ul class="nav navbar-nav"> <!--First Dropdown - This needs to be fixed. Should change the text when clicked to the store that was selected.--> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span id="StoreType">Store Type</span></a> <div id="dropdownStore" class="dropdown-menu" aria-labelledby="dropdown01"> <a class="dropdown-item" id="100" onclick="setStoreType(100);" >Best Buy</a> <a class="dropdown-item" id="101" onclick="setStoreType(101);" >Office Deopt</a> <a class="dropdown-item" id="102" onclick="setStoreType(102);" >Office Max</a> <a class="dropdown-item" id="103" onclick="setStoreType(103);" >Staples</a> <a class="dropdown-item" id="104" onclick="setStoreType(104);" >Costco</a> </div> </li>

答案 1 :(得分:0)

你正在将你的docker链接到db ...我认为db无效或者已经改变了它的IP ...所以你需要停止你的mysql docker,提交它然后尝试再次运行新映像。

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