目录搜索
ComposeAbout versions and upgrading (Compose)ASP.NET Core + SQL Server on Linux (Compose)CLI environment variables (Compose)Command-line completion (Compose)Compose(组成)Compose command-line reference(组合命令行参考)Control startup order (Compose)Django and PostgreSQL (Compose)Docker stacks and distributed application bundles (Compose)docker-compose build(docker-compose构建)docker-compose bundledocker-compose configdocker-compose createdocker-compose downdocker-compose eventsdocker-compose execdocker-compose helpdocker-compose imagesdocker-compose killdocker-compose logsdocker-compose pausedocker-compose portdocker-compose psdocker-compose pulldocker-compose pushdocker-compose restartdocker-compose rmdocker-compose rundocker-compose scaledocker-compose startdocker-compose stopdocker-compose topdocker-compose unpausedocker-compose upEnvironment file (Compose)Environment variables in ComposeExtend services in ComposeFrequently asked questions (Compose)Getting started (Compose)Install ComposeLink environment variables (deprecated) (Compose)Networking in ComposeOverview of Docker ComposeOverview of docker-compose CLIQuickstart: Compose and WordPressRails and PostgreSQL (Compose)Sample apps with ComposeUsing Compose in productionUsing Compose with SwarmEngine.NET Core application (Engine)About images, containers, and storage drivers (Engine)Add nodes to the swarm (Engine)Apply custom metadata (Engine)Apply rolling updates (Engine)apt-cacher-ngBest practices for writing Dockerfiles (Engine)Binaries (Engine)Bind container ports to the host (Engine)Breaking changes (Engine)Build your own bridge (Engine)Configure container DNS (Engine)Configure container DNS in user-defined networks (Engine)CouchDB (Engine)Create a base image (Engine)Create a swarm (Engine)Customize the docker0 bridge (Engine)Debian (Engine)Default bridge networkDelete the service (Engine)Deploy a service (Engine)Deploy services to a swarm (Engine)Deprecated Engine featuresDocker container networking (Engine)Docker overview (Engine)Docker run reference (Engine)Dockerfile reference (Engine)Dockerize an applicationDrain a node (Engine)EngineFAQ (Engine)Fedora (Engine)Get started (Engine)Get started with macvlan network driver (Engine)Get started with multi-host networking (Engine)How nodes work (Engine)How services work (Engine)Image management (Engine)Inspect the service (Engine)Install Docker (Engine)IPv6 with Docker (Engine)Join nodes to a swarm (Engine)Legacy container links (Engine)Lock your swarm (Engine)Manage nodes in a swarm (Engine)Manage sensitive data with Docker secrets (Engine)Manage swarm security with PKI (Engine)Manage swarm service networks (Engine)Migrate to Engine 1.10Optional Linux post-installation steps (Engine)Overview (Engine)PostgreSQL (Engine)Raft consensus in swarm mode (Engine)Riak (Engine)Run Docker Engine in swarm modeScale the service (Engine)SDKs (Engine)Select a storage driver (Engine)Set up for the tutorial (Engine)SSHd (Engine)Storage driver overview (Engine)Store service configuration data (Engine)Swarm administration guide (Engine)Swarm mode key concepts (Engine)Swarm mode overlay network security model (Engine)Swarm mode overview (Engine)Understand container communication (Engine)Use multi-stage builds (Engine)Use swarm mode routing mesh (Engine)Use the AUFS storage driver (Engine)Use the Btrfs storage driver (Engine)Use the Device mapper storage driver (Engine)Use the OverlayFS storage driver (Engine)Use the VFS storage driver (Engine)Use the ZFS storage driver (Engine)Engine: Admin GuideAmazon CloudWatch logs logging driver (Engine)Bind mounts (Engine)Collect Docker metrics with Prometheus (Engine)Configuring and running Docker (Engine)Configuring logging drivers (Engine)Control and configure Docker with systemd (Engine)ETW logging driver (Engine)Fluentd logging driver (Engine)Format command and log output (Engine)Google Cloud logging driver (Engine)Graylog Extended Format (GELF) logging driver (Engine)Journald logging driver (Engine)JSON File logging driver (Engine)Keep containers alive during daemon downtime (Engine)Limit a container's resources (Engine)Link via an ambassador container (Engine)Log tags for logging driver (Engine)Logentries logging driver (Engine)PowerShell DSC usage (Engine)Prune unused Docker objects (Engine)Run multiple services in a container (Engine)Runtime metrics (Engine)Splunk logging driver (Engine)Start containers automatically (Engine)Storage overview (Engine)Syslog logging driver (Engine)tmpfs mountsTroubleshoot volume problems (Engine)Use a logging driver plugin (Engine)Using Ansible (Engine)Using Chef (Engine)Using Puppet (Engine)View a container's logs (Engine)Volumes (Engine)Engine: CLIDaemon CLI reference (dockerd) (Engine)dockerdocker attachdocker builddocker checkpointdocker checkpoint createdocker checkpoint lsdocker checkpoint rmdocker commitdocker configdocker config createdocker config inspectdocker config lsdocker config rmdocker containerdocker container attachdocker container commitdocker container cpdocker container createdocker container diffdocker container execdocker container exportdocker container inspectdocker container killdocker container logsdocker container lsdocker container pausedocker container portdocker container prunedocker container renamedocker container restartdocker container rmdocker container rundocker container startdocker container statsdocker container stopdocker container topdocker container unpausedocker container updatedocker container waitdocker cpdocker createdocker deploydocker diffdocker eventsdocker execdocker exportdocker historydocker imagedocker image builddocker image historydocker image importdocker image inspectdocker image loaddocker image lsdocker image prunedocker image pulldocker image pushdocker image rmdocker image savedocker image tagdocker imagesdocker importdocker infodocker inspectdocker killdocker loaddocker logindocker logoutdocker logsdocker networkdocker network connectdocker network createdocker network disconnectdocker network inspectdocker network lsdocker network prunedocker network rmdocker nodedocker node demotedocker node inspectdocker node lsdocker node promotedocker node psdocker node rmdocker node updatedocker pausedocker plugindocker plugin createdocker plugin disabledocker plugin enabledocker plugin inspectdocker plugin installdocker plugin lsdocker plugin pushdocker plugin rmdocker plugin setdocker plugin upgradedocker portdocker psdocker pulldocker pushdocker renamedocker restartdocker rmdocker rmidocker rundocker savedocker searchdocker secretdocker secret createdocker secret inspectdocker secret lsdocker secret rmdocker servicedocker service createdocker service inspectdocker service logsdocker service lsdocker service psdocker service rmdocker service scaledocker service updatedocker stackdocker stack deploydocker stack lsdocker stack psdocker stack rmdocker stack servicesdocker startdocker statsdocker stopdocker swarmdocker swarm cadocker swarm initdocker swarm joindocker swarm join-tokendocker swarm leavedocker swarm unlockdocker swarm unlock-keydocker swarm updatedocker systemdocker system dfdocker system eventsdocker system infodocker system prunedocker tagdocker topdocker unpausedocker updatedocker versiondocker volumedocker volume createdocker volume inspectdocker volume lsdocker volume prunedocker volume rmdocker waitUse the Docker command line (Engine)Engine: ExtendAccess authorization plugin (Engine)Docker log driver pluginsDocker network driver plugins (Engine)Extending Engine with pluginsManaged plugin system (Engine)Plugin configuration (Engine)Plugins API (Engine)Volume plugins (Engine)Engine: SecurityAppArmor security profiles for Docker (Engine)Automation with content trust (Engine)Content trust in Docker (Engine)Delegations for content trust (Engine)Deploying Notary (Engine)Docker security (Engine)Docker security non-events (Engine)Isolate containers with a user namespace (Engine)Manage keys for content trust (Engine)Play in a content trust sandbox (Engine)Protect the Docker daemon socket (Engine)Seccomp security profiles for Docker (Engine)Secure EngineUse trusted imagesUsing certificates for repository client verification (Engine)Engine: TutorialsEngine tutorialsNetwork containers (Engine)Get StartedPart 1: OrientationPart 2: ContainersPart 3: ServicesPart 4: SwarmsPart 5: StacksPart 6: Deploy your appMachineAmazon Web Services (Machine)Digital Ocean (Machine)docker-machine activedocker-machine configdocker-machine createdocker-machine envdocker-machine helpdocker-machine inspectdocker-machine ipdocker-machine killdocker-machine lsdocker-machine provisiondocker-machine regenerate-certsdocker-machine restartdocker-machine rmdocker-machine scpdocker-machine sshdocker-machine startdocker-machine statusdocker-machine stopdocker-machine upgradedocker-machine urlDriver options and operating system defaults (Machine)Drivers overview (Machine)Exoscale (Machine)Generic (Machine)Get started with a local VM (Machine)Google Compute Engine (Machine)IBM Softlayer (Machine)Install MachineMachineMachine CLI overviewMachine command-line completionMachine concepts and helpMachine overviewMicrosoft Azure (Machine)Microsoft Hyper-V (Machine)Migrate from Boot2Docker to MachineOpenStack (Machine)Oracle VirtualBox (Machine)Provision AWS EC2 instances (Machine)Provision Digital Ocean Droplets (Machine)Provision hosts in the cloud (Machine)Rackspace (Machine)VMware Fusion (Machine)VMware vCloud Air (Machine)VMware vSphere (Machine)NotaryClient configuration (Notary)Common Server and signer configurations (Notary)Getting started with NotaryNotary changelogNotary configuration filesRunning a Notary serviceServer configuration (Notary)Signer configuration (Notary)Understand the service architecture (Notary)Use the Notary client
文字

本节包含配置Linux主机以更好地使用Docker的可选过程。

将Docker管理为非root用户

dockerdaemon绑定到Unix套接字,而不是TCP端口。默认情况下,unix套接字由用户拥有。root而其他用户只能使用sudo...docker守护进程总是以root用户。

如果你不想用sudo当您使用docker命令,创建一个名为docker并将用户添加到其中。当docker守护进程启动,它使unix套接字的所有权可以由docker小组。

警告*docker组授予与root用户。有关此操作如何影响系统安全性的详细信息,请参阅码头守护进程攻击面...

若要创建docker分组并添加用户:

  1. 创建docker小组。 $sudo群加码头

2. 将您的用户添加到docker组中。

$sudo usermod-AG docker$user

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

2. 验证您可以不使用运行docker命令sudo

$docker运行Hello-world

该命令下载测试图像并将其运行到容器中。当容器运行时,它会打印一条信息消息并退出。

配置Docker在启动时启动

大多数当前的Linux发行版(RHEL,CentOS,Fedora,Ubuntu 16.04和更高版本)用于systemd管理在系统引导时启动哪些服务。Ubuntu 14.10及以下版本使用upstart

systemd

$ sudo systemctl enable docker

要禁用此行为,请改为使用disable

$ sudo systemctl disable docker

如果您需要添加HTTP代理,为Docker运行时文件设置不同的目录或分区,或进行其他自定义,请参阅自定义您的systemd Docker守护进程选项。

upstart

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

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

chkconfig

$ sudo chkconfig docker on

使用不同的存储引擎

有关不同存储引擎的信息,请参阅存储驱动程序。默认的存储引擎和受支持的存储引擎列表取决于您的主机的Linux发行版和可用的内核驱动程序。

故障排除

内核兼容性

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

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

$ bash ./check-config.sh

这个脚本只能在Linux上运行,而不是MacOS。

Cannot connect to the Docker daemon

如果您看到以下错误,您的Docker客户端可能被配置为连接到另一个主机上的Docker守护进程,并且可能无法访问该主机。

Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?

若要查看您的客户端配置为连接到哪个主机,请检查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或更高版本,码头容器可能无法访问您的网络。一开始systemd版本220,给定网络%28的转发设置net.ipv4.conf.<interface>.forwarding%29默认值为此设置阻止IP转发。它还与Docker的启用net.ipv4.conf.all.forwarding在容器内设置。

若要在RHEL、CentOS或Fedora上处理此问题,请编辑<interface>.network文件在/usr/lib/systemd/network/在您的码头主机%28ex:/usr/lib/systemd/network/80-container-host0.network%29并在[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.1127.0.1.1缓存dns请求,并将此项添加到/etc/resolv.conf...dnsmasq服务加速DNS查询,并提供DHCP服务.。此配置在具有自己的网络命名空间的Docker容器中无法工作,因为Docker容器解析回送地址,如127.0.0.1本身,而且它不太可能在自己的回送地址上运行DNS服务器。

如果Docker检测到没有在/etc/resolv.conf是一个功能齐全的DNS服务器,会发生以下警告,Docker将使用Google提供的公共DNS服务器8.8.8.88.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将添加真正的DNS名称服务器到/etc/resolv.conf,但你将失去dnsmasq...

您只需要使用这些方法中的一种。

为Docker指定DNS服务器

配置文件的默认位置是/etc/docker/daemon.json.可以使用--config-file守护星旗。下面的文档假设配置文件位于/etc/docker/daemon.json...

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

2. 加一个dns以一个或多个IP地址作为值的密钥。如果文件有现有内容,则只需添加或编辑dns排队。

{“DNS”:“8.8.8.8”、“8.8.4.4”}

如果您的内部DNS服务器无法解析公共IP地址,请至少包含一个DNS服务器,以便您可以连接到Docker Hub并使您的容器可以解析互联网域名。

保存并关闭文件。

  1. 重新启动Docker守护进程。 $sudo服务码头重新启动

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

$docker推出hello-world

  1. 如有必要,请验证Docker容器可以通过对其进行ping来解析内部主机名。$ docker run --rm -it alpine ping -c4 <my_internal_host> PING google.com(192.168.1.2):56个数据字节来自192.168.1.2的64个字节:seq = 0 ttl = 41时间= 7.597 ms来自192.168的64个字节。 1.2:seq = 1 ttl = 41 time = 7.635 ms从192.168.1.2开始64字节:seq = 2 ttl = 41 time = 7.660 ms从192.168.1.2开始64字节:seq = 3 ttl = 41 time = 7.677 ms禁用dnsmasqUbuntu不要将Docker守护程序的配置更改为使用特定IP地址,请按照这些说明在NetworkManager中禁用dnsmasq

2. 编辑/etc/NetworkManager/NetworkManager.conf文件。

3. 注释掉dns=dnsmasq行,通过添加#字符到行的开头。dns=dnsmasq保存并关闭文件。

4. 重新启动NetworkManager和Docker。作为一种选择,您可以重新启动系统。

$sudo重新启动网络管理器$sudo重新启动端口

Rhel、CentOS或Fedora

禁用dnsmasq在RHEL、CentOS或Fedora上:

  1. 禁用dnsmasq服务: $sudo服务dnsmasq停止$sudo system ctl禁用dnsmasq

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

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

如果在运行Docker的同一台主机上运行防火墙,并且希望从另一台主机访问Docker远程API,并且启用远程访问,则需要配置防火墙以允许在Docker端口上进行传入连接,该端口默认为2376如果启用了TLS加密传输,或者2375否则。

UFW的具体说明

UFW(简单防火墙)默认丢弃所有转发流量和所有传入流量。如果要从其他主机访问Docker Remote API并且已启用远程访问,则需要配置UFW以允许Docker端口上的传入连接,2376如果启用TLS加密传输,则默认为启用连接2375。默认情况下,Docker在启用TLS的情况下运行。如果您不使用TLS,强烈建议您不要使用远程主机访问Docker Remote API,以防止远程特权升级攻击。

若要配置UFW并允许在Docker端口上进行传入连接,请执行以下操作:

  1. 确认UFW已启用。 $sudo UFW状态 如果ufw未启用,则其余步骤将没有帮助。

2. 编辑UFW配置文件,它通常是/etc/default/ufw/etc/sysconfig/ufw.设置DEFAULT_FORWARD_POLICY政策ACCEPT...

DEFAULT_FORWARD_POLICY="ACCEPT"

保存并关闭文件。

  1. 如果您需要启用从外部主机访问Docker Remote API并了解安全影响(请参阅此过程之前的部分),然后配置UFW以允许Docker端口上的传入连接(即,2375如果您不使用TLS),如果您使用则2376。$ sudo ufw allow 2376/tcp

2. 重新加载UFW。

$ sudo ufw reload

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. 以用户身份登录Ubuntu或Debian主机sudo特权。

2. 编辑/etc/default/grub文件。添加或编辑该GRUB_CMDLINE_LINUX行以添加以下两个键值对:

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

保存并关闭文件。

  1. 更新GRUB。 $sudo更新-GRUB 如果GRUB配置文件的语法不正确,则会发生错误。在本例中,重复步骤3和4。 这些更改将在重新启动系统时生效。下一步

2. 继续用户指南...

Docker,Docker文档,需求,apt,安装,ubuntu,安装,卸载,升级,更新

上一篇:下一篇: