directory search
Compose About 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 bundle docker-compose config docker-compose create docker-compose down docker-compose events docker-compose exec docker-compose help docker-compose images docker-compose kill docker-compose logs docker-compose pause docker-compose port docker-compose ps docker-compose pull docker-compose push docker-compose restart docker-compose rm docker-compose run docker-compose scale docker-compose start docker-compose stop docker-compose top docker-compose unpause docker-compose up Environment file (Compose) Environment variables in Compose Extend services in Compose Frequently asked questions (Compose) Getting started (Compose) Install Compose Link environment variables (deprecated) (Compose) Networking in Compose Overview of Docker Compose Overview of docker-compose CLI Quickstart: Compose and WordPress Rails and PostgreSQL (Compose) Sample apps with Compose Using Compose in production Using Compose with Swarm Engine .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-ng Best 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 network Delete the service (Engine) Deploy a service (Engine) Deploy services to a swarm (Engine) Deprecated Engine features Docker container networking (Engine) Docker overview (Engine) Docker run reference (Engine) Dockerfile reference (Engine) Dockerize an application Drain a node (Engine) Engine FAQ (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.10 Optional Linux post-installation steps (Engine) Overview (Engine) PostgreSQL (Engine) Raft consensus in swarm mode (Engine) Riak (Engine) Run Docker Engine in swarm mode Scale 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 Guide Amazon 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 mounts Troubleshoot 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: CLI Daemon CLI reference (dockerd) (Engine) docker docker attach docker build docker checkpoint docker checkpoint create docker checkpoint ls docker checkpoint rm docker commit docker config docker config create docker config inspect docker config ls docker config rm docker container docker container attach docker container commit docker container cp docker container create docker container diff docker container exec docker container export docker container inspect docker container kill docker container logs docker container ls docker container pause docker container port docker container prune docker container rename docker container restart docker container rm docker container run docker container start docker container stats docker container stop docker container top docker container unpause docker container update docker container wait docker cp docker create docker deploy docker diff docker events docker exec docker export docker history docker image docker image build docker image history docker image import docker image inspect docker image load docker image ls docker image prune docker image pull docker image push docker image rm docker image save docker image tag docker images docker import docker info docker inspect docker kill docker load docker login docker logout docker logs docker network docker network connect docker network create docker network disconnect docker network inspect docker network ls docker network prune docker network rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker pause docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker ps docker pull docker push docker rename docker restart docker rm docker rmi docker run docker save docker search docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker start docker stats docker stop docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker unpause docker update docker version docker volume docker volume create docker volume inspect docker volume ls docker volume prune docker volume rm docker wait Use the Docker command line (Engine) Engine: Extend Access authorization plugin (Engine) Docker log driver plugins Docker network driver plugins (Engine) Extending Engine with plugins Managed plugin system (Engine) Plugin configuration (Engine) Plugins API (Engine) Volume plugins (Engine) Engine: Security AppArmor 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 Engine Use trusted images Using certificates for repository client verification (Engine) Engine: Tutorials Engine tutorials Network containers (Engine) Get Started Part 1: Orientation Part 2: Containers Part 3: Services Part 4: Swarms Part 5: Stacks Part 6: Deploy your app Machine Amazon Web Services (Machine) Digital Ocean (Machine) docker-machine active docker-machine config docker-machine create docker-machine env docker-machine help docker-machine inspect docker-machine ip docker-machine kill docker-machine ls docker-machine provision docker-machine regenerate-certs docker-machine restart docker-machine rm docker-machine scp docker-machine ssh docker-machine start docker-machine status docker-machine stop docker-machine upgrade docker-machine url Driver 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 Machine Machine Machine CLI overview Machine command-line completion Machine concepts and help Machine overview Microsoft Azure (Machine) Microsoft Hyper-V (Machine) Migrate from Boot2Docker to Machine OpenStack (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) Notary Client configuration (Notary) Common Server and signer configurations (Notary) Getting started with Notary Notary changelog Notary configuration files Running a Notary service Server configuration (Notary) Signer configuration (Notary) Understand the service architecture (Notary) Use the Notary client
characters

本节包含配置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,安装,卸载,升级,更新

Previous article: Next article: