热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux安装Docker后步骤

2019独角兽企业重金招聘Python工程师标准以非root用户身份管理DockerDocker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Uni

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

以非root用户身份管理Docker

Docker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由用户root拥有,而其他用户只能使用sudo访问它。Docker守护程序始终以 root 用户身份运行。
如果您不想在docker命令前加上sudo,请创建一个名为docker的Unix组并向其添加用户。当Docker守护程序启动时,它会创建一个可由docker组成员访问的Unix套接字。

  1. 创建 docker 组

sudo groupadd docker

  1. 将用户添加到 docker 组

sudo usermod -aG docker $USER

  1. 注销并重新登录,以便重新评估您的组成员身份 如果在虚拟机上进行测试,则可能需要重新启动虚拟机才能使更改生效。 在桌面Linux环境(如X Windows)上,完全注销会话,然后重新登录。

  2. 验证是否可以运行docker命令sudo

docker run hello-world

如果在将用户添加到docker组之前最初使用sudo运行Docker CLI命令,则可能会看到以下错误:

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

这表示由于sudo命令,您的~/.docker/目录是使用不正确的权限创建的。 要解决此问题,请删除~/.docker/目录(它会自动重新创建,但任何自定义设置都将丢失),或使用以下命令更改其所有权和权限:

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R

配置Docker以在启动时启动

大多数当前的Linux发行版(RHEL,CentOS,Fedora,Ubuntu 16.04及更高版本)使用systemd来管理系统启动时启动的服务。
systemd

sudo systemctl enable docker

要禁用开机启动改用disable

sudo systemctl disable docker

upstart
Docker自动配置为使用upstart启动时启动。要禁用此行为,请使用以下命令:

echo manual | sudo tee /etc/init/docker.override

chkconfig

chkconfig docker on
# chkconfig docker off

故障排除

内核兼容性

如果您的内核早于3.10版本或者缺少某些模块,则Docker无法正常运行。要检查内核兼容性,可以下载并运行check-config.sh脚本。

curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh
bash ./check-config.sh

要查看客户端配置连接到哪个主机,请检查环境中DOCKER_HOST变量的值

env | grep DOCKER_HOST

如果此命令返回值,则Docker客户端将设置为连接到在该主机上运行的Docker守护程序。如果未设置,则Docker客户端将设置为连接到本地主机上运行的Docker守护程序。如果设置错误,请使用以下命令取消设置:

unset DOCKER_HOST

您可能需要在~/.bashrc或~/.profile等文件中编辑环境,以防止错误地设置DOCKER_HOST变量。 如果DOCKER_HOST按预期设置,请验证Docker守护程序是否在远程主机上运行,​​以及防火墙或网络中断是否阻止您进行连接。

IP转发问题

如果使用手动配置你的网络systemd-network有systemd 219或更高版本,Docker容器可能无法访问您的网络。从systemd版本220 开始,给定网络(net.ipv4.conf..forwarding)的转发设置默认为关闭。此设置可防止IP转发。它还与Docker net.ipv4.conf.all.forwarding在容器中启用设置的行为相冲突。
要在RHEL,CentOS或Fedora上解决此问题,请.network 在/usr/lib/systemd/network/Docker主机上编辑该文件(例如:)/usr/lib/systemd/network/80-container-host0.network并在该[Network]部分中添加以下块。

[Network]
...
IPForward=kernel
# OR
IPForward=true
...

此配置允许按预期从容器进行IP转发。

DNS resolver found in resolv.conf and containers can't use it

使用GUI的Linux系统通常运行网络管理器,该网络管理器使用dnsmasq在环回地址上运行的 实例,例如127.0.0.1或 127.0.1.1缓存DNS请求,并将此条目添加到 /etc/resolv.conf。该dnsmasq服务可加速DNS查询并提供DHCP服务。此配置不拥有自己的网络命名空间的码头工人容器内工作,因为多克尔容器解决回环地址,如127.0.0.1对 自身,这是很不可能的运行在自己的回送地址的DNS服务器。
如果Docker检测到没有引用的DNS服务器/etc/resolv.conf是功能齐全的DNS服务器,则会出现以下警告,并且Docker使用Google提供的公共DNS服务器8.8.8.8并8.8.4.4进行DNS解析。

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers
can't use it. Using default external servers : [8.8.8.8 8.8.4.4]

如果您看到此警告,请先检查您是否使用dnsmasq:

ps aux |grep dnsmasq

如果您的容器需要解析网络内部的主机,则公共名称服务器不够用。你有两个选择:

  • 您可以为Docker指定要使用的DNS服务器,或
  • 您可以dnsmasq在NetworkManager中禁用。如果您这样做,NetworkManager会添加您真正的DNS名称服务器/etc/resolv.conf,但您将失去可能的好处dnsmasq。

为Docker指定DNS服务器

配置文件的默认位置是/etc/docker/daemon.json。您可以使用--config-file 守护程序标志更改配置文件的位置。以下文档假定配置文件位于/etc/docker/daemon.json。

  1. 创建或编辑Docker守护程序配置文件,该/etc/docker/daemon.json文件默认为 file,它控制Docker守护程序配置。

sudo nano /etc/docker/daemon.json

  1. 添加dns一个或多个IP地址作为值的密钥。如果文件包含现有内容,则只需添加或编辑该dns行。

{"dns": ["8.8.8.8", "8.8.4.4"]
}

如果您的内部DNS服务器无法解析公共IP地址,请至少包含一个DNS服务器,以便您可以连接到Docker Hub,以便您的容器可以解析Internet域名。
保存并关闭文件。

  1. 重新启动Docker守护程序。

sudo service docker restart

  1. 通过尝试提取图像来验证Docker是否可以解析外部IP地址:

docker pull hello-world

  1. 如有必要,请验证Docker容器是否可以通过ping它来解析内部主机名。

docker run --rm -it alpine ping -c4 PING google.com (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms
64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms
64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms
64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms

禁用 DNSMASQ

ubuntu的
如果您不想更改Docker守护程序的配置以使用特定的IP地址,请按照以下说明dnsmasq在NetworkManager中禁用。

  1. 编辑/etc/NetworkManager/NetworkManager.conf文件。
  2. 通过dns=dnsmasq在行#的开头添加一个字符来注释掉该行。

# dns=dnsmasq

保存并关闭文件。 3. 重新启动NetworkManager和Docker。作为替代方案,您可以重新启动系统。

sudo restart network-manager
sudo restart docker

RHEL,CentOS或Fedora
要dnsmasq在RHEL,CentOS或Fedora上禁用:

  1. 禁用该dnsmasq服务:

sudo service dnsmasq stop
sudo systemctl disable dnsmasq

  1. 使用Red Hat文档手动配置DNS服务器 。

允许通过防火墙访问远程API

如果您在运行Docker的同一主机上运行防火墙并且想要从另一台主机访问Docker Remote API并启用远程访问,则需要配置防火墙以允许Docker端口上的传入连接,默认为2376if启用TLS加密传输或2375 以其他方式启用。
两个常见的防火墙守护程序是 UFW(简单防火墙)(通常用于Ubuntu系统)和firewalld(通常用于基于RPM的系统)。请参阅操作系统和防火墙的文档,但以下信息可能有助于您入门。这些选项相当宽松,您可能希望使用不同的配置来更好地锁定系统。

  • UFW:DEFAULT_FORWARD_POLICY="ACCEPT"在您的配置中设置。
  • firewalld:在策略中添加与以下类似的规则(一个用于传入请求,另一个用于传出请求)。确保接口名称和链名称正确。

[ -i zt0 -j ACCEPT ][ -o zt0 -j ACCEPT ]

Your kernel does not support cgroup swap limit capabilities

在Ubuntu或Debian主机上,使用图像时,您可能会看到类似于以下内容的消息。

WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

在基于RPM的系统上不会发生此警告,这些系统默认启用这些功能。
如果您不需要这些功能,则可以忽略该警告。您可以按照这些说明在Ubuntu或Debian上启用这些功能。即使Docker未运行,内存和交换计费也会占总可用内存的1%左右,总体性能降低10%。

  1. 以具有sudo权限的用户身份登录Ubuntu或Debian主机。
  2. 编辑/etc/default/grub文件。添加或编辑该GRUB_CMDLINE_LINUX行以添加以下两个键值对:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

  1. 更新GRUB。

sudo update-grub

重新启动系统后,更改将生效。


转:https://my.oschina.net/u/3746547/blog/2244675



推荐阅读
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
author-avatar
老谢2502887117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有