Can';t使用IP访问Docker数据库(仅本地主机)

Can';t使用IP访问Docker数据库(仅本地主机),docker,networking,localhost,Docker,Networking,Localhost,我正在尝试设置Docker以允许从网络上的其他设备进行连接。当前,要访问Docker,我访问计算机上的localhost。我正在尝试使用计算机的本地IP(192.168.0.140)进行连接,该IP允许我查看文件,但不能连接到数据库 我认为这是我的配置中的一个问题,但我对Docker了解不够,无法解决它 version: '2' services: webserver: build: ./docker/webserver image: localdev ports:

我正在尝试设置Docker以允许从网络上的其他设备进行连接。当前,要访问Docker,我访问计算机上的
localhost
。我正在尝试使用计算机的本地IP(
192.168.0.140
)进行连接,该IP允许我查看文件,但不能连接到数据库

我认为这是我的配置中的一个问题,但我对Docker了解不够,无法解决它

version: '2'

services:
  webserver:
    build: ./docker/webserver
    image: localdev
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - ./www:/var/www/html
    links:
      - db

  db:
    image: mysql:5.6
    ports:
      - 3306
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    links:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: secret
    ports:
      - '8080:80'

任何帮助都将不胜感激。

也许您应该这样做:

version: '2'

services:
  webserver:
    build: ./docker/webserver
    image: localdev
    ports:
      - '0.0.0.0:80:80'   # Map container port 80 on your "public" ip on port 80, it will be available on the network 
      - '0.0.0.0:443:443' # Same for port 443 
    volumes:
      - ./www:/var/www/html
    links:
      - db

  db:
    image: mysql:5.6
    # ports:
    #  - 3306    # You don't need to map port 3306 because mysql already expose this port for others containers, unless you wan't to access to your mysql directly
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    #links:
    #  - db # Not necessary, with docker-compose v2 every containers are in the same network and see each other
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      MYSQL_USER: root
      MYSQL_ROOT_PASS
      WORD: secret
    ports:
      - 'localhost:8080:80' # to keep your phpmyadmin only available from localhost.

您能够连接到其他容器的原因是您已经映射了容器和主机之间的端口。 对于正在使用短端口语法的数据库:

ports:
  - 3306
这将在主机上选择一个随机端口。要能够连接到数据库,请使用长格式语法:

ports:
  - '3306:3306'

在这种情况下,您将能够连接到
localhost:3306

上的数据库。由于存在一些有效点,因此不确定为什么会被否决。但是,我更改了设置,仍然无法访问IP上的数据库-仅在
localhost
上,这表明某些设置仍然不正确…我希望这可能会修复它,但它没有产生任何影响。我仍然无法从内部IP访问端口。我可以从
http://192.168.0.104:8080/
,并且可以访问文件,但除非从
本地主机查看,否则CMS不会连接到数据库。