首页 > 其他分享 >在Docker中配置网络并访问互联网

在Docker中配置网络并访问互联网

时间:2023-03-04 19:11:59浏览次数:42  
标签:容器 network -- 网络 访问 互联网 Docker docker

Docker是一个流行的容器化平台,可以帮助用户轻松地创建、部署和运行应用程序。在使用Docker时,网络配置是一个很重要的问题。本文将介绍如何在Docker中配置网络,并访问互联网。

一、配置Docker镜像源

在Docker中,镜像源是一个重要的组成部分,因为它可以让您快速地下载和安装Docker镜像。以下是如何配置Docker镜像源的步骤:

1.执行以下命令,查看是否在 docker.service 文件中配置过镜像地址。

systemctl cat docker | grep '\-\-registry\-mirror'

如果该命令有输出,那么请执行 $ systemctl cat docker 查看 ExecStart= 出现的位置,修改对应的文件内容去掉 --registry-mirror 参数及其值,并按接下来的步骤进行配置。

2.如果以上命令没有任何输出,那么就可以在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。

之后重新启动服务。

sudo systemctl daemon-reload
sudo systemctl restart docker

二、配置Docker容器网络

以下是如何配置Docker容器网络的步骤:

首先,使用docker pull命令拉取CentOS镜像。

docker pull centos

然后,使用docker run命令启动CentOS容器,并进入容器的命令行界面。

docker run -it centos /bin/bash

接下来,使用vi命令编辑/etc/resolv.conf文件,并将nameserver行更改为您想要使用的DNS服务器的IP地址。

vi /etc/resolv.conf
nameserver 114.114.114.114
nameserver 114.114.115.115

保存并关闭文件,然后退出编辑器。

重新启动网络服务以使更改生效。

bashCopy code
systemctl restart network

如果出现了下述问题:

[root@18f25a9f1bf3 ~]# systemctl restart network
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

您需要通过此命令启动您的容器以启用 systemd。

docker run -d --privileged 镜像名称 /usr/sbin/init

其中,--privileged选项允许容器中的进程拥有访问主机的所有权限,镜像名称为要启动的镜像名称。执行完该命令后,会启动一个新容器,并进入容器的命令行界面。此时可以使用管理员权限执行命令。-d是后台运行。

可以使用docker exec命令进入正在运行的容器并以root用户身份运行shell:

docker exec -u 0 -it <container-id> /bin/bash

其中,-u 0表示以root用户身份进入容器,-it表示交互式进入容器的终端。

三、解决Docker容器网络访问问题

Docker容器访问互联网,一直通过--net=host参数间接实现。该方式存在弊端,因为该模式禁用Docker容器的网络隔离。容器共享宿主机的网络命名空间,直接暴露在公共网络中,即容器和宿主机具有相同的IP地址。而使用桥接网络模式,可以避免这种问题,并且更加安全。

方法一:启用宿主机路由

启用命令: 宿主机的IP路由转发功能一定要打开,否则所创建的容器无法联网!容器run后运行下面命令也有效。墙裂推荐。

echo 1 > /proc/sys/net/ipv4/ip_forward

启用命令后,可以通过docker run命令加上--net=host参数使用Docker容器。

docker run --privileged -tid -p 8000:8000 -p 8088:8088 -p 8042:8042 -p 50070:50070 --net=host 镜像名称

注意:在使用--net=host参数时,Docker容器将使用宿主机的网络命名空间,容器中的进程直接暴露在公共网络中,具有相同的IP地址,因此有安全风险。

方法二:使用自定义网络

Docker中的自定义网络,提供了一种更安全的方式来管理容器间的通信,即使没有--net=host参数,也可以使容器联网。自定义网络是一种Docker内置的网络驱动程序,可以创建一个本地或远程的虚拟网络,让容器可以使用虚拟网络中的IP地址进行通信。以下是使用自定义网络的方法。

创建自定义网络

docker network create my_network

启动容器,使用--network参数指定要使用的网络。

docker run --name container1 --network=my_network -tid busybox
docker run --name container2 --network=my_network -tid busybox

查看网络连接情况

docker network inspect my_network

以上命令将显示虚拟网络的详细信息,包括网络的名称、驱动程序、子网等。

通过以上两种方法可以解决Docker容器网络访问问题。

参考链接:

https://blog.csdn.net/qq_24452475/article/details/94304149

https://blog.csdn.net/TrinidadW/article/details/111939428

https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.57e31b11R6sMCE

https://docker-practice.github.io/zh-cn/install/mirror.html

标签:容器,network,--,网络,访问,互联网,Docker,docker
From: https://www.cnblogs.com/zuiyixin/p/17178861.html

相关文章

  • mac-docker
    安装:直接下载img安装通过brew安装:brewinstall--cask--appdir=/Applicationsdocker配置:设置国内镜像:在desktop的设置(Preferences)界面中,DockerEngine的json中......
  • PostgreSQL Docker部署指南
    1.Dockercomposeversion:'3'services:postgresql:container_name:postgresqlimage:'rapidfort/postgresql'network: nginx_net: ipv......
  • 如何在 OpenEuler 系统中安装 Docker
    Docker是一种流行的开源容器化平台,它能够将应用程序与其依赖项打包成可移植的容器,从而简化了应用程序的部署和管理。本文将介绍在OpenEuler系统中安装Docker并使用Do......
  • docker搭建maven私服(nexus3),整合springboot上传下载依赖
    一、前言我们在JavaWeb开发中必不可少的就是jar包管理-maven,在没有maven之前,都是自己手动下载jar包导入到项目中,非常的繁琐。maven出现之后,又迎来新的问题,对于仓库里人家......
  • docker-compose up -d 运行报错: ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.1
    docker部署python时执行到RUNapkupdate....命令出现错误:ERROR:https://dl-cdn.alpinelinux.org/alpine/v3.17/community:BADsignature一般是软件包源地址请求......
  • 在阿里云服务器上,配置docker加速器
    在阿里云服务器上配置Docker加速器可以大大加速Docker镜像的下载速度,以下是具体步骤:登录阿里云控制台,打开容器镜像服务。在左侧导航栏中选择“加速器”,然后单击“立......
  • 如何编写正确高效的Dockerfile
    Dockerfile是什么Dockerfile非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,RUN,COPY,ADD指令都会生成一个Layer,而Do......
  • docker下mysql容器数据的定时备份与恢复
    1、数据备份脚本vimmysqldump.sh#!/bin/bashdockerexec-i容器id/容器名mysqldump-uroot-proot-A>/mydata/mysqldump/mydb.sql-A表示备份所有数据库......
  • 软件测试之Docker常见问题汇总!附解决方法!
    1、配置国内源进行docker安装,报错HTTPError404-NotFound原因:由于配置国内镜像源时,把地址写错了,导致后面安装docker提示HTTPError404解决方法:1)进入到/etc/yum......
  • docker从0到0.5
    docker从0到0.5什么是docker下面三样组成了docker的体系:Dockerfile(配置文件):声明构建镜像时需要安装的依赖和要copy到镜像中的源码文件;类比Makefileimage(镜像):保存环境......