Docker: 只对主机和其上的其他容器开放容器端口,不对互联网开放

Docker: Open Container port only to Host and other Containers on it, without opening to the internet

我正在制作一个用于学习目的的示例 ETL 应用程序。我想要 2 个容器:一个 MySQL 容器和一个 Python 容器 运行 Redis 来提供数据。

我想在这些容器上打开端口,但出于明显的安全原因,我不想将它们打开到 Internet。

如果我在这些容器上打开端口,它们是否只对主机开放,还是主机也必须打开这些端口?

如果您没有任何 Compose ports:docker run -p 选项,容器将能够相互通信,但无法从主机或脱离主机访问。示例 Compose 设置:

version: '3.8'
services:
  app:
    build: .
    ports: ['8080:8080']  # the application itself is visible
    environment:
      PGHOST: postgres    # using normal Docker inter-container communication
      REDIS_HOST: redis
  postgres:
    image: postgres:13
    # no ports:
  redis:
    image: redis:6
    # no ports:

您还可以使用可选的绑定地址设置 ports:。如果该地址是 127.0.0.1,则可以从主机系统上的非容器进程访问发布的端口。其他主机将无法连接到它,容器将无法使用主机网关地址或host.docker.internal连接到它。

services:
  postgres:
    # from non-container processes on the host,
    # PGHOST=localhost PGPORT=54321 reaches this container
    #
    # from other containers in this Compose file,
    # PGHOST=postgres PGPORT=5432 still works
    ports: ['127.0.0.1:54321:5432']