docker-compose中的网络可见性

问题描述 投票:0回答:1

我建立了一个包含3个服务的docker-compose:dbnginxselenium。用nginx托管的应用程序与数据库(nginx db)通信,并且硒测试该应用程序(selenium-> app)。

version: '3'
services:
  nginx:
    image: <my_private_repo>/nginx
    ...
  db:
    image: <my_private_repo>/db
    # nginx cannot communicate with db after I remove exposing port 3306
    ports:
      - "3306:3306"
    ...
  selenium:
    image: joyzoursky/python-chromedriver:3.8-selenium
    command: "bash seleniumScript.sh"
    depends_on:
      - nginx
      - db

我用docker-compose run selenium运行测试暴露数据库端口后一切正常,但是当我停止暴露端口3306时,nginx无法与数据库通信。

我的理解是,一个docker-compose设置中的所有服务都会自动连接,用户不需要创建任何其他网络,但是我显然错了。

我的问题是如何设置服务之间的公开端口而不将其公开给主机?

更新:我的nginx应用已将数据库主机配置为服务名称db。使用db主机的Selenium脚本设置填充数据库,并通过https://nginx网址测试nginx应用。

docker-compose docker-networking
1个回答
1
投票

This question在这里问的内容非常相似。

nginx容器可能无法访问数据库容器,因为您正在通过docker host localhost访问它。

位于同一网络中的容器可以始终相互访问,而不会暴露任何端口,而是使用主机名。参见:container_name。使用container_name,您可以使用container_name从Nginx容器内部连接到数据库容器。

默认情况下为db:3306,因此除非您希望阻止某些容器相互通信,否则不必创建任何新网络。

© www.soinside.com 2019 - 2024. All rights reserved.