docker - Docker 命令中的 --net=host 选项到底有什么作用?

标签 docker docker-networking

我是 Docker 的初学者。我在 docker run 命令中找不到任何关于此选项的明确描述,对此我感到有些困惑。

我们可以在不指定端口的情况下使用它来访问在 docker 容器上运行的应用程序吗?例如,如果我在 docker run 命令中使用选项 -p 8080:8080 运行通过 8080 端口中的 docker 镜像部署的 webapp,我知道我必须在 Docker 容器的 8080 端口上访问它ip/theWebAppName。但我真的想不出 --net=host 选项是如何工作的。

最佳答案

安装 docker 后默认有 3 个网络:

docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f3be8b1ef7ce        bridge              bridge              local
fbff927877c1        host                host                local
023bb5940080        none                null                local

我试图保持简单。因此,如果您默认启动一个容器,它将在桥接 (docker0) 网络中创建。

$ docker run -d jenkins
1498e581cdba        jenkins             "/bin/tini -- /usr..."   3 minutes ago       Up 3 minutes        8080/tcp, 50000/tcp   friendly_bell

在 jenkins 的 dockerfile 中暴露了 808050000 端口。这些端口在其桥接网络上为容器打开。因此,桥接网络中的所有内容都可以访问端口 808050000 上的容器。桥接网络中的所有内容都在 "Subnet": "172.17.0.0/16", 的私有(private)范围内,如果要从外部访问它们,则必须使用 映射端口- p 8080:8080。这会将容器的端口映射到真实服务器(主机网络)的端口。因此,在 8080 上访问您的服务器将路由到您在端口 8080 上的桥接网络。

现在您还拥有主机网络。它不会容器化容器网络。因此,如果您在主机网络中启动一个容器,它将如下所示(它是第一个):

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
1efd834949b2        jenkins             "/bin/tini -- /usr..."   6 minutes ago       Up 6 minutes                              eloquent_panini
1498e581cdba        jenkins             "/bin/tini -- /usr..."   10 minutes ago      Up 10 minutes       8080/tcp, 50000/tcp   friendly_bell

区别在于端口。您的容器现在位于您的主机网络中。因此,如果您在主机上打开端口 8080,您将立即访问容器。

$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT

我在防火墙中打开了端口 8080,当我现在在端口 8080 上访问我的服务器时,我正在访问我的 jenkins。我认为 this blog也有助于更好地理解它。

关于docker - Docker 命令中的 --net=host 选项到底有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43316376/

相关文章:

node.js - Docker-compose 和 Node 容器不是主要容器

linux - 容器内的 virt-install 命令

docker - docker-compose 服务内没有互联网

docker - 通过其他 docker 容器访问 ftp 服务

docker - 在Google Cloud Build上运行步骤时,如何指定docker标志?

docker - Docker构建 “no such file or directory”错误

使用 Flyway 运行测试并在 Docker 容器内嵌入 Postgresql 时出现 java.net.ConnectException

node.js - Docker:从容器到其他容器的 http 请求停滞

wordpress - Docker Compose容器达到彼此的构建时间

docker - 是否可以在 docker-compose 中同时使用网络默认值和外部外部?