Docker 教程 在线

2308Windows Docker 安装

ENOENT: no such file or directory, open 'C:\Users\Administrator\.docker\machine\machines\default\ca.pem'

docker-machine default

where it seems to be getting stuck (waiting longer than usual) and when I open Virtualbox and look at the preview,

it is already initialized and ready to accept commands but my terminal command is still waiting.

Then when I exit (e.g. Ctrl+C or Cmd+C) this error will show up.

open /Users/yourUsername/.docker/machine/machines/default/ca.pem: no such file or directory

The error could also be Daemon not responding yet: dial tcp : xxx operation timed out

These resolved it for me.

docker-machine regenerate-certs default

docker-machine restart default

I was not using existing/custom certificates and letting docker toolbox create/manage it and willing to loose any information in that virtual/docker-machine.

It should be true for most people but if you use custom certificates or don’t let docker-machine manage it for you, this will not apply to you and you need to find answers elsewhere.

There is also some references that AnyConnect (VPN) + your VirtualBox networking settings could cause it so if these do not work, try turning it off as well.

Then find out more about VirtualBox networking settings.

If you must be in VPN then > you can use this script (while on VPN) – script found here – it will fix routes/rules that gets changed by AnyConnect

References

//github.com/docker/toolbox/issues/76


2221Docker 容器连接

Docker Quickstart Terminal: exit status 255 解决办法

$ docker-machine rm default

$ docker-machine create --driver virtualbox default

2220Docker 镜像使用

.docker/machine/machines/default/ca.pem: no such file or directory

Was doing a docker-machine env default

where it seems to be getting stuck (waiting longer than usual) and when I open Virtualbox and look at the preview, it is already initialized and ready to accept commands but my terminal command is still waiting.

Then when I exit (e.g. Ctrl+C or Cmd+C) this error will show up.

open /Users/yourUsername/.docker/machine/machines/default/ca.pem: no such file or directory

The error could also be

Daemon not responding yet: dial tcp : xxx operation timed out

These resolved it for me.

docker-machine regenerate-certs default

docker-machine restart default

I was not using existing/custom certificates and letting docker toolbox create/manage it and willing to loose any information in that virtual/docker-machine. It should be true for most people but if you use custom certificates or don’t let docker-machine manage it for you, this will not apply to you and you need to find answers elsewhere.

There is also some references that AnyConnect (VPN) + your VirtualBox networking settings could cause it so if these do not work, try turning it off as well. Then find out more about VirtualBox networking settings. If you must be in VPN then

> you can use this script (while on VPN) – script found here – it will fix routes/rules that gets changed by AnyConnect

References

* https://github.com/docker/toolbox/issues/76

* Docker Toolbox

2219Docker 容器使用

docker 创建 WEB 应用容器 python flask

Docker 客户端

直接输入 docker 命令 查看  Docker 客户端 命令选项

~# docker

通过命令 docker command --help 了解指定的 Docker 命令使用方法

例如 查看 docker stats 指令

~# docker stats --help

运行一个web应用

在docker容器中运行 Python Flask 应用  运行一个web应用

# docker run -d -P training/webapp python app.py

参数

-d 让容器在后台运行

-P 将容器内部使用的网络端口映射到我们使用的主机上

# docker run -d -P training/webapp python app.py

使用 docker ps 来查看 正在运行的容器

$ docker ps

CONTAINER ID        IMAGE               COMMAND             C

STATUS              PORTS                     NAMES

78f25ddf3e5e        training/webapp     "python app.py"     L

go   Up 29 seconds       0.0.0.0:32769->5000/tcp   facesoho

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上

可以通过浏览器访问WEB应用

可以指定 -p 标识来绑定指定端口

$ docker run -d -p 5000 5000 training/webapp python app.py

使用 Inspect 和 network ls 查看 看是否是与宿主机是一个IP

也可以用命令查看详情

# docker inspect 78f25ddf3e5e

$ docker inspect 78f25ddf3e5e

[{

  "Id": "iamcontainerid",

  "Created": "2019-06-23T02:36:10.867602229Z",

  "Path": "python",

  "Args": ["app.py"  ],

  "State": {

      "Status": "running",

      "Running": true,

      "Paused": false,

      "Restarting": false,

      "OOMKilled": false,

      "Dead": false,

      "Pid": 3827,

      "ExitCode": 0,

      "Error": "",

      "StartedAt": "2019-06-23T02:36:15.740543346Z",

      "FinishedAt": "0001-01-01T00:00:00Z"

  },

  "Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557",

  "ResolvConfPath": "/mnt/sda1/var/lib/docker/containers/iamcontainerid/resolv.conf",

  "HostnamePath": "/mnt/sda1/var/lib/docker/containers/iamcontainerid/hostname",

  "HostsPath": "/mnt/sda1/var/lib/docker/containers/iamcontainerid/hosts",

  "LogPath": "/mnt/sda1/var/lib/docker/containers/iamcontainerid/iamcontainerid-json.log",

  "Name": "/facesoho",

  "RestartCount": 0,

  "Driver": "overlay2",

  "Platform": "linux",

  "MountLabel": "",

  "ProcessLabel": "",

  "AppArmorProfile": "",

  "ExecIDs": null,

  "HostConfig": {

      "Binds": null,

      "ContainerIDFile": "",

      "LogConfig": {

          "Type": "json-file",

          "Config": {}

      },

      "NetworkMode": "default",

      "PortBindings": {},

      "RestartPolicy": {

          "Name": "no",

          "MaximumRetryCount": 0

      },

      "AutoRemove": false,

      "VolumeDriver": "",

      "VolumesFrom": null,

      "CapAdd": null,

      "CapDrop": null,

      "Dns": [],

      "DnsOptions": [],

      "DnsSearch": [],

      "ExtraHosts": null,

      "GroupAdd": null,

      "IpcMode": "shareable",

      "Cgroup": "",

      "Links": null,

      "OomScoreAdj": 0,

      "PidMode": "",

      "Privileged": false,

      "PublishAllPorts": true,

      "ReadonlyRootfs": false,

      "SecurityOpt": null,

      "UTSMode": "",

      "UsernsMode": "",

      "ShmSize": 67108864,

      "Runtime": "runc",

      "ConsoleSize": [

          25,

          80

      ],

      "Isolation": "",

      "CpuShares": 0,

      "Memory": 0,

      "NanoCpus": 0,

      "CgroupParent": "",

      "BlkioWeight": 0,

      "BlkioWeightDevice": [],

      "BlkioDeviceReadBps": null,

      "BlkioDeviceWriteBps": null,

      "BlkioDeviceReadIOps": null,

      "BlkioDeviceWriteIOps": null,

      "CpuPeriod": 0,

      "CpuQuota": 0,

      "CpuRealtimePeriod": 0,

      "CpuRealtimeRuntime": 0,

      "CpusetCpus": "",

      "CpusetMems": "",

      "Devices": [],

      "DeviceCgroupRules": null,

      "DiskQuota": 0,

      "KernelMemory": 0,

      "MemoryReservation": 0,

      "MemorySwap": 0,

      "MemorySwappiness": null,

      "OomKillDisable": false,

      "PidsLimit": 0,

      "Ulimits": null,

      "CpuCount": 0,

      "CpuPercent": 0,

      "IOMaximumIOps": 0,

      "IOMaximumBandwidth": 0,

      "MaskedPaths": [

          "/proc/asound",

          "/proc/acpi",

          "/proc/kcore",

          "/proc/keys",

          "/proc/latency_stats",

          "/proc/timer_list",

          "/proc/timer_stats",

          "/proc/sched_debug",

          "/proc/scsi",

          "/sys/firmware"

      ],

      "ReadonlyPaths": [

          "/proc/bus",

          "/proc/fs",

          "/proc/irq",

          "/proc/sys",

          "/proc/sysrq-trigger"

      ]

  },

  "GraphDriver": {

      "Data": {

          "LowerDir": "/mnt/sda1/var/lib/docker/overlay2/bd6a6ae7eb150f14653482db53d963c0c13f5bb5a580de46ab64bfa41f815d3c-init/diff:/mnt/sda1/var/lib/docker/overlay2/bd4edb545385585b4af8d4feb4c6e890352066649a3ae25e3726c5e92ff77c1/diff:/mnt/sda1/var/lib/docker/overlay2/7dc6b634c571acc751066bc7d19a60573b229609f9060ad8269651dc4c392102/diff:/mnt/sda1/var/lib/docker/oerlay2/a5dee5a4228d115041053d6585214aeaaee1ea8b418756177a8dd6ddee502742/diff:/mnt/sda1/var/lib/docker/overlay2/eab74d9d693480ea2db05daea4ac5a49ab68f58b2ba9e37edde7c12936e55e2/diff:/mnt/sda1/var/lib/docker/overlay2/dee73f5bcb1d2c616f734eae70a8a25f26c28e6b1123405fd9cd7092fb897c66/diff:/mnt/sda1/var/lib/docker/overlay2/2b15b2467a6624ef1dd0f40e14f3533e321da16ff33501fdf96dc7f9160fa52/diff:/mnt/sda1/var/lib/docker/overlay2/74af237df6c3bd59b34f51be66aca90d0e759a3513c07ba1904dbc1e911fb942/diff:/mnt/sda1/var/lib/docker/verlay2/95fba65a0efb49a11570e42c56ecb84e134a631357d82adec4d220ffc33b77c6/diff:/mnt/sda1/var/lib/docker/overlay2/a27a54afcd6558d1f6b488f594436a40d7572ca5906a107d6b25bad33936b6a/diff:/mnt/sda1/var/lib/docker/overlay2/c7fc89c3fb9f7b2aa39b8a6d6076df0788ebfa11f945b522611a07a2235542ad/diff:/mnt/sda1/var/lib/docker/overlay2/229882acb225caec4e5c5b791ded480c1a9bcd5a10ee939301727d43fc36c85/diff:/mnt/sda1/var/lib/docker/overlay2/9dc3110a881d33bf5c253e5280910bcb87f18b75b959a9019ff9ea544383a3b7/diff:/mnt/sda1/var/lib/dockeroverlay2/6b62019304b64efe921bdd8c157c81ea842c07a99831f941fd601a8288d67f10/diff",

          "MergedDir": "/mnt/sda1/var/lib/docker/overlay2/bd6a6ae7eb150f14653482db53d963c0c13f5bb5a580de46ab64bfa41f815d3c/merged",                "UpperDir":"/mnt/sda1/var/lib/docker/overlay2/bd6a6ae7eb150f14653482db53d963c0c13f5bb5a580de46ab64bfa41f815d3c/diff",                "WorkDir":"/mnt/sda1/var/lib/docker/overlay2/bd6a6ae7eb150f14653482db53d963c0c13f5bb5a580de46ab64bfa41f815d3c/work"

      },

      "Name": "overlay2"

  },

  "Mounts": [],

  "Config": {

      "Hostname": "78f25ddf3e5e",

      "Domainname": "",

      "User": "",

      "AttachStdin": false,

      "AttachStdout": false,

      "AttachStderr": false,

      "ExposedPorts": {

          "5000/tcp": {}

      },

      "Tty": false,

      "OpenStdin": false,

      "StdinOnce": false,

      "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"     ],

      "Cmd": [

          "python",

          "app.py"

      ],

      "Image": "training/webapp",

      "Volumes": null,

      "WorkingDir": "/opt/webapp",

      "Entrypoint": null,

      "OnBuild": null,

      "Labels": {}

  },

  "NetworkSettings": {

      "Bridge": "",

      "SandboxID": "189ab25e414f6216444fedf67454e2af58154312217aee7bcc1dc876214ac71f",

      "HairpinMode": false,

      "LinkLocalIPv6Address": "",

      "LinkLocalIPv6PrefixLen": 0,

      "Ports": {

          "5000/tcp": [{"HostIp": "0.0.0.0","HostPort": "32769"}

          ]

      },

      "SandboxKey": "/var/run/docker/netns/189ab25e414f",

      "SecondaryIPAddresses": null,

      "SecondaryIPv6Addresses": null,

      "EndpointID": "04c2ae0fb3a90743ee16db94768e1aefd524cc54b14d0b7d86fdde98bedb323b",

      "Gateway": "172.17.0.1",

      "GlobalIPv6Address": "",

      "GlobalIPv6PrefixLen": 0,

      "IPAddress": "172.17.0.3",

      "IPPrefixLen": 16,

      "IPv6Gateway": "",

      "MacAddress": "02:42:ac:11:00:03",

      "Networks": {

          "bridge": {

              "IPAMConfig": null,

              "Links": null,

              "Aliases": null,

              "NetworkID": "645a396201b4bb77813da346460bfd471c228b1078b0895353229ae73a5956bd",

              "EndpointID": "04c2ae0fb3a90743ee16db94768e1aefd524cc54b14d0b7d86fdde98bedb323b",

              "Gateway": "172.17.0.1",

              "IPAddress": "172.17.0.3",

              "IPPrefixLen": 16,

              "IPv6Gateway": "",

              "GlobalIPv6Address": "",

              "GlobalIPv6PrefixLen": 0,

              "MacAddress": "02:42:ac:11:00:03",

              "DriverOpts": null

          }

      }

  }

}

]

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE

645a396201b4        bridge              bridge              local

e080f787ef30        host                host                local

f6f085729cd0        none                null                local

由此可以采用桥连接 与宿主机是一个IP 连接验证如下

网络端口的快捷方式

通过docker ps 命令可以查看到容器的端口映射 docker还提供了另一个快捷方式 docker port 可以查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号

上面 创建的web应用容器ID为 78f25ddf3e5e 名字为 facesoho

可以使用docker port 78f25ddf3e5e 或docker port facesoho来查看容器端口的映射情况

$ docker port 78f25ddf3e5e

5000/tcp -> 0.0.0.0 5000

$ docker port facesoho

5000/tcp -> 0.0.0.0 5000

查看WEB应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出

$ docker logs -f 78f25ddf3e5e

* Running on http //0.0.0.0 5000/ (Press CTRL+C to quit)

192.168.239.1 - - [09/May/2016 16 30 37] "GET / HTTP/1.1" 200 -

192.168.239.1 - - [09/May/2016 16 30 37] "GET /favicon.ico HTTP/1.1" 404 -

-f 表示实时输出

查看 内部运行的进程

$ docker top facesoho

停止WEB应用容器

$ docker stop facesoho

重启WEB应用容器

$ docker restart facesoho

$ docker start facesoho

facesoho

docker ps -l 查询最后一次创建的容器:

正在运行的容器 可以使用 docker restart 命令来重启

使用 docker rm 命令 删除不需要的容器

$ docker rm facesoho

facesoho

删除容器时 容器必须是停止状态 否则会报如下错误

$ docker rm facesoho

Error response from daemon  You cannot remove a running container iamcontainerid. Stop the container before attempting removal or use -f

2218Docker 容器连接

$ docker-machine ip default

192.168.99.100

$ docker ps -l

CONTAINER ID        IMAGE               COMMAND             C

     STATUS              PORTS                     NAMES

78f25ddf3e5e        training/webapp     "python app.py"     L

go   Up 29 seconds       0.0.0.0:32769->5000/tcp   facesoho

机器default   ip 192.168.99.100

容器facesoho  端口 2376

可在主机访问 //192.168.99.100:32768