老天 发布的文章

Docker命令使用详解
时间:2014-11-20 来源:服务器之家 投稿:root

如果各位看官熟悉 Git 和 GitHub ,可与 Docker 做个类比,可更加容易理解 Docker 和 Docker Hub 及两者关系。

  1. docker version

显示 Docker 版本信息。

  1. docker info

显示 Docker 系统信息,包括镜像和容器数。

  1. docker search
    docker search [options "o">] term
    docker search -s django

从 Docker Hub 中搜索符合条件的镜像。

--automated 只列出 automated build
类型的镜像;

--no-trunc 可显示完整的镜像描述;

-s 40 列出收藏数不小于40的镜像。

  1. docker pull
    docker pull [-a "o">] [user/ "o">]name[:tag "o">]
    docker pull laozhu/telescope:latest

从 Docker Hub 中拉取或者更新指定镜像。

-a 拉取所有 tagged 镜像 。

  1. docker login
    root@moon:~# docker login
    Username: username
    Password: **
    Email: user@domain.com
    Login Succeeded

按步骤输入在 Docker Hub 注册的用户名、密码和邮箱即可完成登录。

  1. docker logout

运行后从指定服务器登出,默认为官方服务器。

  1. docker images
    docker images [options "o">] [name]

列出本地所有镜像。其中 [name] 对镜像名称进行关键词查询。

-a 列出所有镜像(含过程镜像);

-f 过滤镜像,如: -f ['dangling=true'] 只列出满足
dangling=true 条件的镜像;

--no-trunc 可显示完整的镜像ID;

-q 仅列出镜像ID。

--tree 以树状结构列出镜像的所有提交历史。

  1. docker ps

列出所有运行中容器。

-a 列出所有容器(含沉睡镜像);

--before="nginx" 列出在某一容器之前创建的容器,接受容器名称和ID作为参数;

--since="nginx" 列出在某一容器之后创建的容器,接受容器名称和ID作为参数;

-f [exited=] 列出满足
exited= 条件的容器;

-l 仅列出最新创建的一个容器;

--no-trunc 显示完整的容器ID;

-n=4 列出最近创建的4个容器;

-q 仅列出容器ID;

-s 显示容器大小。

  1. docker rmi
    docker rmi [options "o">] "o">[image...]
    docker rmi nginx:latest postgres:latest python:latest

从本地移除一个或多个指定的镜像。

-f 强行移除该镜像,即使其正被使用;

--no-prune 不移除该镜像的过程镜像,默认移除。

  1. docker rm
    docker rm [options "o">] "o">[container...]
    docker rm nginx-01 nginx-02 db-01 db-02
    sudo docker rm -l /webapp/redis

-f 强行移除该容器,即使其正在运行;

-l 移除容器间的网络连接,而非容器本身;

-v 移除与容器关联的空间。

  1. docker history
    docker history "o">[options]

查看指定镜像的创建历史。

--no-trunc 显示完整的提交记录;

-q 仅列出提交记录ID。

  1. docker start|stop|restart
    docker start|stop "p">|restart [options "o">] "o">[container...]

启动、停止和重启一个或多个指定容器。

-a 待完成

-i 启动一个容器并进入交互模式;

-t 10 停止或者重启容器的超时时间(秒),超时后系统将杀死进程。

  1. docker kill
    docker kill "o">[options "o">] "o">[container...]

杀死一个或多个指定容器进程。

-s "KILL" 自定义发送至容器的信号。

  1. docker events
    docker events [options "o">]
    docker events --since= "s2">"20141020"
    docker events --until= "s2">"20120310"

从服务器拉取个人动态,可选择时间区间。

  1. docker save
    docker save -i "debian.tar"
    docker save > "debian.tar"

将指定镜像保存成 tar 归档文件, docker load 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。

-o "debian.tar" 指定保存的镜像归档。

  1. docker load
    docker load [options]
    docker load < debian.tar
    docker load -i "debian.tar"

从 tar 镜像归档中载入镜像, docker save 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。

-i "debian.tar" 指定载入的镜像归档。

  1. docker export
    docker export
    docker export nginx-01 > export.tar

将指定的容器保存成 tar 归档文件, docker import 的逆操作。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚。

  1. docker import
    docker import url|- "o">[repository[:tag "o">]]
    cat export.tar "p">| docker import - imported-nginx:latest
    docker import http://example.com/export.tar

从归档文件(支持远程文件)创建一个镜像, export 的逆操作,可为导入镜像打上标签。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚。

  1. docker top
    docker top <running_container> "o">[ps options]

查看一个正在运行容器进程,支持 ps 命令参数。

  1. docker inspect
    docker instpect nginx:latest
    docker inspect nginx-container

检查镜像或者容器的参数,默认返回 JSON 格式。

-f 指定返回值的模板文件。

  1. docker pause

暂停某一容器的所有进程。

  1. docker unpause
    docker unpause

恢复某一容器的所有进程。

  1. docker tag
    docker tag [options "o">] [:tag "o">] repository/ "o">name "o">[:tag]

标记本地镜像,将其归入某一仓库。

-f 覆盖已有标记。

  1. docker push
    docker push name[:tag "o">]
    docker push laozhu/nginx:latest

将镜像推送至远程仓库,默认为 Docker Hub 。

  1. docker logs
    docker logs [options "o">]
    docker logs -f -t --tail= "s2">"10" insane_babbage

获取容器运行时的输出日志。

-f 跟踪容器日志的最近更新;

-t 显示容器日志的时间戳;

--tail="10" 仅列出最新10条容器日志。

  1. docker run
    docker run [options "o">] [ "nb">command] "o">[arg...]

启动一个容器,在其中运行指定命令。

-a stdin 指定标准输入输出内容类型,可选 STDIN/
STDOUT / STDERR 三项;

-d 后台运行容器,并返回容器ID;

-i 以交互模式运行容器,通常与 -t 同时使用;

-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb" 为容器指定一个名称;

--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致;

--dns-search example.com 指定容器DNS搜索域名,默认和宿主一致;

-h "mars" 指定容器的hostname;

-e username="ritchie" 设置环境变量;

--env-file=[] 从指定文件读入环境变量;

--cpuset="0-2" or --cpuset="0,1,2"
绑定容器到指定CPU运行;

-c 待完成

-m 待完成

--net="bridge" 指定容器的网络连接类型,支持 bridge /
host / none
container:<name|id> 四种类型;

--link=[] 待完成

--expose=[] 待完成

转载请注明原文地址:http://www.server110.com/docker/201411/11122.html

Docker 网络配置方法
时间:2014-11-20 来源:服务器之家 投稿:root

有四种不同的选项会影响容器守护进程的服务名称。

  1. -h HOSTNAME 或者 --hostname=HOSTNAME --设置容器的主机名,仅本机可见。这种方式是写到/etc/hostname ,以及/etc/hosts 文件中,作为容器主机IP的别名,并且将显示在容器的bash中。不过这种方式设置的主机名将不容易被容器之外可见。这将不会出现在 docker ps 或者 其他的容器的/etc/hosts 文件中。
  2. --link=CONTAINER_NAME:ALIAS --使用这个选项去run一个容器将在此容器的/etc/hosts文件中增加一个主机名ALIAS,这个主机名是名为CONTAINER_NAME 的容器的IP地址的别名。这使得新容器的内部进程可以访问主机名为ALIAS的容器而不用知道它的IP。--link= 关于这个选项的详细讨论请看: Communication between containers.
  3. --dns=IP_ADDRESS --设置DNS服务器的IP地址,写入到容器的/etc/resolv.conf文件中。当容器中的进程尝试访问不在/etc/hosts文件中的主机A时,容器将以53端口连接到IP_ADDRESS这个DNS服务器去搜寻主机A的IP地址。
  4. --dns-search=DOMAIN --设置DNS服务器的搜索域,以防容器尝试访问不完整的主机名时从中检索相应的IP。这是写入到容器的/etc/resolv.conf文件中的。当容器尝试访问主机 host,而DNS搜索域被设置为 example.com ,那么DNS将不仅去查寻host主机的IP,还去查询host.example.com的IP。

在docker中,如果启动容器时缺少以上最后两种选项设置时,将使得容器的/etc/resolv.conf文件看起来和宿主主机的/etc/resolv.conf文件一致。这些选项将修改默认的设置。

转载请注明原文地址:http://www.server110.com/docker/201411/11119.html

docker命令的使用方法总结
时间:2014-11-22 来源:服务器之家 投稿:root

总结一下常用命令:

其中<>阔起来的参数为必选,[]阔起来为可选

docker version 查看docker的版本号,包括客户端、服务端、依赖的Go等

docker info 查看系统(docker)层面信息,包括管理的images, containers数等

docker search 在docker index中搜索image

docker pull 从docker registry server 中下拉image

docker push <image|repository> 推送一个image或repository到registry

docker push <image|repository>:TAG 同上,指定tag

docker inspect <image|container> 查看image或container的底层信息

docker images TODO filter out the intermediate image layers (intermediate image layers 是什么)

docker images -a 列出所有的images

docker ps 默认显示正在运行中的container

docker ps -l 显示最后一次创建的container,包括未运行的

docker ps -a 显示所有的container,包括未运行的

docker logs 查看container的日志,也就是执行命令的一些输出

docker rm <container...> 删除一个或多个container

docker rm docker ps -a -q 删除所有的container

docker ps -a -q | xargs docker rm 同上, 删除所有的container

docker rmi <image...> 删除一个或多个image

docker start/stop/restart 开启/停止/重启container

docker start -i 启动一个container并进入交互模式

docker attach attach一个运行中的container

docker run 使用image创建container并执行相应命令,然后停止

docker run -i -t /bin/bash 使用image创建container并进入交互模式, login shell是/bin/bash

docker run -i -t -p <host_port:contain_port> 将container的端口映射到宿主机的端口

docker commit [repo:tag] 将一个container固化为一个新的image,后面的repo:tag可选

docker build 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image

docker build -t repo[:tag] 同上,可以指定repo和可选的tag

docker build - < 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image

docker port 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到

转载请注明原文地址:http://www.server110.com/docker/201411/11134.html

阿里云部署Docker(9)----Dockerfile脚本定制镜像
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

技术爱好者都是比较懒的。而docker又是开发者支持起来的。所以,它肯定是有比较懒的方式供我们定制自己需要的东西。
docker build

docker 用build指令来执行dockerfile脚本。

具体的用法:

sudo docker build .
小心后面那个点,表示当前目录。当前目录有一个Dockerfile的文件。

当然,你可以指定你建立的镜像的名字。

sudo docker build -t shykes/myapp .

然后你就可以看到执行过程,或许,会非常的漫长,取决于要下的东西的大小和你的网速。

sudo docker build -t SvenDowideit/ambassador .

Uploading context 10.24 kB

Uploading context

Step 1 : FROM docker-ut

---> cbba202fe96b

Step 2 : MAINTAINER SvenDowideit@home.org.au

---> Using cache

---> 51182097be13

Step 3 : CMD env | grep _TCP= | sed 's/.PORT([0-9])_TCP=tcp://(.):(.)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' | sh && top

---> Using cache

---> 1a5ffc17324d

Successfully built 1a5ffc17324d
当你下完之后,你可以用:
你会发现多了你下载的镜像。

好接下来我们讲讲Dockerfile本身如何编写。
格式:

Comment

INSTRUCTION arguments
命令是大写的。 FROM

所有的镜像都应该是基于某一个现有的镜像。

所以,就有了FROM 指令
或者,更加具体点说明它的Tag。

FROM语句必须是第一句“非注释”语句,在Dockerfile中。
我们总是会想在一个脚本里面添加些注释,来说明一些想说的话。 注释

那就是注释:#开头的行。

但是#在行中,则却表示是一个参数。
维护

接下来,需要说明维护人。
填上你的NICK NAME。表示你做的。 RUN指令

RUN指令应该是用的最多的指令。

RUN (the command is run in a shell - /bin/sh -c - shell form)

另一种方式是:

RUN ["executable", "param1", "param2"] (exec form)

RUN语句会在当前镜像的基础上执行该条指令,同时执行完就成了一个新的镜像一样,即数据和影响都是会保存的,然后用这个新的镜像去执行下一条指令,这样上一条的结果镜像是下一条指令的基础,如此不断推进。

CMD指令

格式:

CMD ["executable","param1","param2"] (exec form, this is the preferred form)

CMD ["param1","param2"] (as default parameters to ENTRYPOINT)

CMD command param1 param2 (shell form)

有三种形式。

CMD在DOckerfile里面只能用一次,如果你写了很多条,那么只有最后一条是有效的。

CMD有什么用呢,可以理解为Main函数一样吧,作为一个入口。具体见英文

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.
EXPOSE 这个单词的中文叫什么,暴露。对,他就是暴露镜像的某个接口出来。例如,我的镜像是用来做http服务的,那么我就理应暴露我镜像的80端口。然后-p 主机端口:80 ,还记得吧。端口映射。

EXPOSE [...]
ENV 环境变量的设置
环境变量一旦设定,对整个Dockerfile都是有效的。

当然,key = value这样直接说,其实效果是一样的。
ADD指令

有点像拷贝指令,至少它就是完成文件的拷贝工作的。

ADD hom* /mydir/ # adds all files starting with "hom"

ADD hom?.txt /mydir/ # ? is replaced with any single character

COPY指令

和ADD一样,是拷贝
ENTRYPOINT 入口点

真正的MAIN函数

ENTRYPOINT ["executable", "param1", "param2"] (exec form, the preferred form)

ENTRYPOINT command param1 param2 (shell form)
CMD和这个指令的区别,是应用的场景不一样。

这里,我给大家贴原文会比较好。

An ENTRYPOINT helps you to configure a container that you can run as an executable. That is, when you specify an ENTRYPOINT, then the whole container runs as if it was just that executable.

Unlike the behavior of the CMD instruction, The ENTRYPOINT instruction adds an entry command that will not be overwritten when arguments are passed to docker run. This allows arguments to be passed to the entry point, i.e. docker run -d will pass the -d argument to the entry point.

You can specify parameters either in the ENTRYPOINT JSON array (as in "like an exec" above), or by using a CMD instruction. Parameters in the ENTRYPOINT instruction will not be overridden by the docker run arguments, but parameters specified via a CMD instruction will be overridden by docker run arguments.

Like a CMD, you can specify a plain string for the ENTRYPOINT and it will execute in /bin/sh -c:

FROM ubuntu
ENTRYPOINT ls -l
For example, that Dockerfile's image will always take a directory as an input and return a directory listing. If you wanted to make this optional but default, you could use a CMD instruction:

FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["ls"]
WORKDIR 工作目录

RUN ENTERPOINT带的指令在哪里执行的设置。

此外,还有一些指令,例如

USER ,ONBUILD,等就不想说了。
最后给出一个示例

Nginx

VERSION 0.0.1

FROM ubuntu

MAINTAINER Victor Vieux mailto:victor@docker.com

RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

Firefox over VNC

VERSION 0.3

FROM ubuntu

Install vnc, xvfb in order to create a 'fake' display and firefox

RUN apt-get update && apt-get install -y x11vnc xvfb firefox

RUN mkdir /.vnc

Setup a password

RUN x11vnc -storepasswd 1234 ~/.vnc/passwd

Autostart firefox (might not be the best way, but it does the trick)

RUN bash -c 'echo "firefox" >> /.bashrc'

EXPOSE 5900

CMD ["x11vnc", "-forever", "-usepw", "-create"]

Multiple images example

VERSION 0.1

FROM ubuntu

RUN echo foo > bar

Will output something like ===> 907ad6c2736f

FROM ubuntu

RUN echo moo > oink

Will output something like ===> 695d7793cbe4

Youll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with

/oink.

转载请注明原文地址:http://www.server110.com/docker/201411/11143.html

阿里云部署Docker(8)----安装和使用redmine
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

安装redmine对过程进行管理。

需要说明的是:当你在docker images的时候,会说没连接到xxxx的时候,而且会提示用“docker -d",其实这只是把docker作为一个后台进程,但是当你的SecureCRT退出的时候,这个后台进程也是会被退出的。所以下次你又要。而且,数据很容易丢失。

正确的做法是。 service docker start。记住咯。

好,redmine的安装和使用教程

https://registry.hub.docker.com/u/sameersbn/redmine/

注意数据的保存。我有一种简单的方法,就是尽量不重启docker,也不stopredmine,如果非得停止了,记得docker ps -l 然后找出你刚刚运行的redmine 容器,然后docker commit 容器为 镜像,然后下次用它。不断的这么迭代。数据也是可以保存下来的。

下列是我主导开发的一个Android移动端产品的项目,用Redmine跟踪的。因为目前人员少,却是“很敏捷”,废话,你拿两个人来开发,能不敏捷么,当然,后续等团队步入正轨后,会多起来的。

转载请注明原文地址:http://www.server110.com/docker/201411/11142.html

阿里云部署Docker(7)----将容器连接起来
时间:2014-11-22 来源:服务器之家 投稿:root

阿里云部署Docker系列文章目录:
阿里云部署Docker(1)----阿里云Ubuntu环境搭建Docker服务
阿里云部署Docker(2)
阿里云部署Docker(3)----指令学习
阿里云部署Docker(4)----容器的使用
阿里云部署Docker(5)----管理和发布您的镜像
阿里云部署Docker(6)----解决删除镜像问题
阿里云部署Docker(7)----将容器连接起来
阿里云部署Docker(8)----安装和使用redmine
阿里云部署Docker(9)----Dockerfile脚本定制镜像

我们在阿里云上部署Docker服务系列教程已经到了第7节,

需要回顾的同学可以翻看我的博客。

今天,我们学习一下怎么将docker里面的容器连接起来。例如我是一个web服务,我需要用到mysql服务,如果它们属于不同的容器内,如果连接。这就是我们这节课要解决的问题。

连接的第一步是为我们的容器命名
容器命名 容器命名是在run的选项里面--name 具体如下:
root@iZ28ikebrg6Z:~# docker run -d -P --name web training/webapp python app.py
ca9d0b6245e0451e911ac03ef3d2b7748120a55d29c2d8b3cc9d9cd6e4ad0148
root@iZ28ikebrg6Z:~# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 11224 11210 0 80 0 - 5601 wait pts/1 00:00:00 bash
0 R 0 11907 11224 0 80 0 - 2121 - pts/1 00:00:00 ps
root@iZ28ikebrg6Z:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca9d0b6245e0 training/webapp:latest "python app.py" 15 seconds ago Up 14 seconds 0.0.0.0:49153->5000/tcp web
root@iZ28ikebrg6Z:~#

我们可以详细的了解这个容器的底层信息:
root@iZ28ikebrg6Z:~# docker inspect --help

Usage: docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]

Return low-level information on a container or image

-f, --format="" Format the output using the given go template.
root@iZ28ikebrg6Z:~# docker inspect -f "{{.Name}}" ca9
/web
root@iZ28ikebrg6Z:~#

需要注意的是,容器的名字需要是唯一的。不能够有冲突。如果你想容器停止后就放弃这个名字,那么你可以在运行的时候加入选项 --rm 容器连接

容器连接之后就可以相互交流数据,例如包含web的容器,它可以连接到一个包含数据库的容器,然后由数据容器给它提供数据存储。

连接是--link name:alias 其中name是我们要连接的容器,比如一个数据库容器mysql,而alias是这个连接的名称。

我们先执行命令,然后解释:

root@iZ28ikebrg6Z:~# docker stop web
web
root@iZ28ikebrg6Z:~# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
sameersbn/redmine latest f0bec095f291 6 hours ago 614.6 MB
sameersbn/gitlab latest bf5c375d9057 3 days ago 635.1 MB
sameersbn/postgresql latest 24a6064fa4cd 11 days ago 142.1 MB
training/webapp latest 31fa814ba25a 4 months ago 278.8 MB
sameersbn/redmine 2.4.2 b95b8046d47c 8 months ago 1.327 GB
root@iZ28ikebrg6Z:~# docker run -d --name db sameersbn/postgresql
a9dbca9857fddbe366ce76909943e856eecc12df27886830e43fe5c91a53abc7
root@iZ28ikebrg6Z:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9dbca9857fd sameersbn/postgresql:latest "/start" 5 seconds ago Up 3 seconds 5432/tcp db
root@iZ28ikebrg6Z:~# docker rm -f web
web
root@iZ28ikebrg6Z:~# docker run -d -P --name web --link db:db training/webapp python app.py
ff990b53706d0a1277c1ba37b274c397ba906ba8ea28e9d9b57e78f84ef12d93
root@iZ28ikebrg6Z:~# docker ps --no-trunc | awk '{print $NF}'
NAMES
web
db,web/db
root@iZ28ikebrg6Z:~#

我们连接的是sameersbn/postgresql 这也是个数据库,是我不小心下载下来的,没有mysql。拿着用吧,会出错再说。

好,连是连接起来了,可是如何交互数据呢?因为到现在位置我们只是看到多了个--link 选项而已,假如我要使用数据库,我总得增删改查啊。

docker提供两种方式,一种是环境变量,一种是改/etc/hosts
环境变量

当一个连接产生之后,docker首先会为每个连接产生一个环境变量_NAME,例如刚才的连接 --link db:db,则有

db_NAME=/web/db

还有,一些源容器暴露的端口。这部分我直接贴官网的说明,或许更能够讲清楚,大家自行理解。

PORT_ will contain a URL reference to the port. Where is the alias name specified in the --link parameter (e.g. webdb), is the port number being exposed, and is either TCP or UDP. The format of the URL will be: ://<container_ip_address>: (e.g. tcp://172.17.0.82:8080). This URL will then be split into the following 3 environment variables for convinience:
PORT__ADDR will contain just the IP address from the URL (e.g. WEBDB_PORT_8080_TCP_ADDR=172.17.0.82).
PORT__PORT will contain just the port number from the URL (e.g. WEBDB_PORT_8080_TCP_PORT=8080).
PORT__PROTO will contain just the protocol from the URL (e.g. WEBDB_PORT_8080_TCP_PROTO=tcp).

设置环境变量的方法为:

$ sudo docker run --rm --name web2 --link db:db training/webapp env

. . .
DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5432_TCP=tcp://172.17.0.5:5432
DB_PORT_5432_TCP_PROTO=tcp
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_ADDR=172.17.0.5

还有另一种方法是更改目标容器中的hosts文件,在这个文件中加入源容器 /etc/hosts

具体如下:

$ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash
root@aed84ee21bde:/opt/webapp# cat /etc/hosts
172.17.0.7 aed84ee21bde
. . .
172.17.0.5 db

可以实验一下是否能够联通
root@aed84ee21bde:/opt/webapp# apt-get install -yqq inetutils-ping
root@aed84ee21bde:/opt/webapp# ping db
PING db (172.17.0.5): 48 data bytes
56 bytes from 172.17.0.5: icmp_seq=0 ttl=64 time=0.267 ms
56 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.250 ms
56 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.256 ms

就算源容器重启,它也会自动更新
$ sudo docker restart db
root@aed84ee21bde:/opt/webapp# cat /etc/hosts
172.17.0.7 aed84ee21bde
. . .
172.17.0.9 db

好。容器的连接就到这里。到实战的时候记得有这么回事就可以。

转载请注明原文地址:http://www.server110.com/docker/201411/11141.html