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']
我正在制作一个用于学习目的的示例 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']