dockerbtc测试链
1. docker 不识别软链接吗
本质上 symlink 只是一个文件或目录的"链接"(anchor),实际上,早期的 symlink 实现中,一个 symlink 就是包含了一个路径名的普通文件。
所以,一个 symlink 在容器和宿主机上指向的实际目标很可能是不同的,比如通过以下脚本新建的容器:
```
mkdir volume
ln -s / volume/root
docker run --rm -ti -v `pwd`/volume:/data -w /data busybox sh
```
在宿主机,和容器内分别执行`ls root`, 看到的内容是不同的,分别是宿主机和容器的根目录。
如果你希望 symlink 在容器和宿主机上指向的目标一致,靠谱一点的办法是将目标文件放在 volume 内,而且采用相对路径的方式创建 symlink, 比如:
```
mkdir volume
cd volume
touch target
ln -s ./target symlink1
ln -s `pwd`/target symlink2
docker run --rm -ti -v `pwd`:/data -w /data busybox sh
```
在以上脚本建立的容器内执行` cat /data/symlink1`和`cat /data/symlink2`,会发现前者能正确访问到文件,后者则会报错
2. 如何修改docker network inspect mynet
熟悉 Linux 技术的人都知道,容器只是利用名字空间进行隔离的进程而已,Docker 在容器实现上也是利用了 Linux 自身的技术。
有时候,我们需要在宿主机上对容器内进行一些操作,当然,这种绕过 Docker 的操作方式并不推荐。
如果你使用的是比较新的 Docker 版本,会尴尬的发现,直接使用系统命令,会无法访问到容器名字空间。
这里,首先介绍下逗 ip netns地 系列命令。这些命令负责操作系统中的网络名字空间。
首先,我们使用 逗add地 命令创建一个临时的网络名字空间。
ip netns add test
然后,使用 show 命令来查看系统中的网络名字空间,会看到刚创建的 test 名字空间。
ip netns show test
另外,一个很有用的命令是 exec,会在对应名字空间内执行命令。例如
ip netns exec test ifconfig
使用 del 命令删除刚创建的 test 名字空间。
ip netns del test
接下来运行一个 Docker 容器,例如
docker run -it ubuntu
再次执行 ip netns show命令。很遗憾,这里什么输出都没有。
原因在于,Docker 启动容器后仍然会以进程号创建新的名字空间,但在较新的版本里面,默认删除了系统中的名字空间信息文件。
网络名字空间文件位于 /var/run/netns 下面,比如我们之前创建的 test 名字空间,则在这个目录下有一个 test 文件。诸如 netns 类似的系统命令依靠这些文件才能获得名字空间的信息。
在容器启动后,查看这个目录,会发现什么都没有。
OK,那让我们手动重建它。
首先,使用下面的命令查看容器进程信息,比如这里的1234。
docker inspect --format='{{. State.Pid}} ' container_id 1234
接下来,在 /proc 目录(保存进程的所有相关信息)下,把对应的网络名字空间文件链接到 /var/run/netns 下面
ln -s /proc/1234/ns/net /var/run/netns/
然后,就可以通过正常的系统命令来查看或访问容器的名字空间了。例如
ip netns show 1234 ip netns exec 1234 ifconfig eth0 172.16.0.10/16...
3. 如何查看docker容器uid
熟悉 Linux 技术的人都知道,容器只是利用名字空间进行隔离的进程而已,Docker 在容器实现上也是利用了 Linux 自身的技术。
有时候,我们需要在宿主机上对容器内进行一些操作,当然,这种绕过 Docker 的操作方式并不推荐。
如果你使用的是比较新的 Docker 版本,会尴尬的发现,直接使用系统命令,会无法访问到容器名字空间。
这里,首先介绍下“ ip netns” 系列命令。这些命令负责操作系统中的网络名字空间。
首先,我们使用 “add” 命令创建一个临时的网络名字空间。
ip netns add test
然后,使用 show 命令来查看系统中的网络名字空间,会看到刚创建的 test 名字空间。
ip netns show test
另外,一个很有用的命令是 exec,会在对应名字空间内执行命令。例如
ip netns exec test ifconfig
使用 del 命令删除刚创建的 test 名字空间。
ip netns del test
接下来运行一个 Docker 容器,例如
docker run -it ubuntu
再次执行 ip netns show命令。很遗憾,这里什么输出都没有。
原因在于,Docker 启动容器后仍然会以进程号创建新的名字空间,但在较新的版本里面,默认删除了系统中的名字空间信息文件。
网络名字空间文件位于 /var/run/netns 下面,比如我们之前创建的 test 名字空间,则在这个目录下有一个 test 文件。诸如 netns 类似的系统命令依靠这些文件才能获得名字空间的信息。
在容器启动后,查看这个目录,会发现什么都没有。
OK,那让我们手动重建它。
首先,使用下面的命令查看容器进程信息,比如这里的1234。
docker inspect --format='{{. State.Pid}} ' container_id 1234
接下来,在 /proc 目录(保存进程的所有相关信息)下,把对应的网络名字空间文件链接到 /var/run/netns 下面
ln -s /proc/1234/ns/net /var/run/netns/
然后,就可以通过正常的系统命令来查看或访问容器的名字空间了。例如
ip netns show 1234 ip netns exec 1234 ifconfig eth0 172.16.0.10/16...
4. docker镜像能上网吗
docker 镜像是无法连接外网,只有通过部署这个镜像的容器才能实现访问外网。查看此链接,详细介绍如何使用docker镜像,docker容器等功能,网页链接
5. 如何使用docker中的php环境来调试代码
Docker容器化PHP开发环境搭建-DVWA (含xdebug调试)
摘要:Docker容器化技术在过去的2015年得到了大面积的普及应用,特别是以灵雀云、数人云、阿里云以及阿里百川TAE2.0等为代表的服务商的推动,可以预见2016会是云服务大爆发的一年,会有越来越多的互联网企业将自己的业务部署到基于Docker容器的环境里来。
Docker容器化技术在过去的2015年得到了大面积的普及应用,特别是以灵雀云、数人云、阿里云以及阿里百川TAE2.0等为代表的服务商的推动,可以预见2016会是云服务大爆发的一年,会有越来越多的互联网企业将自己的业务部署到基于Docker容器的环境里来。
本文以 DVWA 部署为例,来讲解PHP环境部署+基于XDEBUG调试环境的容器化解决方案。
Github代码
segmentfault参考链接
Docker容器化PHP开发环境搭建-DVWA (含xdebug调试)
创建目录
基础目录
~/dvwa/data 存放MySQL数据库
~/dvwa/htdocs 项目代码
~/dvwa/log 存放所有输出log
从代码仓库构建
cd ~
git clone https://github.com/MarkThink/DockerPHP.git dvwa
创建这些目录
mkdir ~/dvwa ~/dvwa/data ~/dvwa/data/mysql ~/dvwa/log ~/dvwa/log/nginx ~/dvwa/log/php ~/dvwa/htdocs
下载镜像及构建
cd ~/dvwa/htdocs/dvawfiles
make pull
make dl
make build
下载代码
cd ~/dvwa/htdocs
git clone https://github.com/MarkThink/DVWA.git dvwa_app
IDE调试配置
Docker容器化PHP开发环境搭建-DVWA (含xdebug调试)Docker容器化PHP开发环境搭建-DVWA (含xdebug调试)
绑定域名
```
sudo vi /etc/hosts
192.168.99.100
6. 下载比特币测试网络的Docker镜像问题
你要用封装好的直接GHOST安装,你就下GHOST版本的,你下的可能是干净安装的,这种装系统要慢点,完了要自己装各种应用程序和没有的驱动,但用着更稳定我自己更喜欢用干净版的,GHOST的有驱动包过大,驱动全但找到的驱动不一定时最完美的,更不可能是最新的,各种软件装完就得升级,一样烦
7. 怎么查看docker 的flocker的数据卷
有一件事触动了我。当我解释和回答Docker初学者提出的问题时,我发现其中一个很普遍,那就是当老的解决方案仍然可以解决现有问题时,大家又在寻找新的解决方案。 工程师有一个癖好,就是忘记他们所知道的,然后他们可以不用做太多改变,而在一个新的范例中很大程度上运用这些已经掌握的知识。所以最终,这篇博客有三个目的: 给你一个例子使用Docker执行使用 提醒你,你在docker到来之前所获得的知识仍然是有用的 帮助你构建将这个知识放到容器中的思维 真的,这篇文章可以被称为备份RDBMS和Docker,但我需要一些具体的例子。因为这篇文章是关于PostgreSQL触发的问题,我决定就这样做。 这里的情况。有一个PostgreSQL服务器运行在一个Docker容器,和你非常满意的这两个很棒的软件的结合。但是你是一个聪明的人,你知道,迟早,您将需要备份的数据库。也许硬件将会失败,或者新的实习生将会失败,你永远不会知道的。所以你决定定期备份数据库。 但是如何做到这一点。PostgreSQL运行在Docker中,并没有明显的方式访问数据。 问题可以归结为对您的PostgreSQL实例运行pg_mp,和你有三种方式实现这一目标。 根据您的版本的Docker,使用nsenter或Docker执行以获得shell在容器内,并将您的数据(使用pg_mp)转储到一个共享卷(postgres容器运行PostgreSQL的名称): docker exec postgres pg_mp -h db -f /shared/backup.sql 但我们可以做的更好,对吗?理想的流程将涉及能够连接到PostgreSQL无需一个shell的容器。有两种方法可以做到这一点。 首先,用容器的一切方法。你建立一个pg_mp容器(这是一个容器,pg_mp作为它的入口点),并将其链接到PostgreSQL容器在运行时。这里有一个 pg_mp容器的Dockerfile 用 docker build 构建注意:建立一个特定的容器pg_mp不是强制性的。Damien如上所述的评论,你重新使用 包含 pg_mp在内的PostgreSQL镜像一点儿问题都没有。我们在这里建立一个容器是因为要练习。 运行:在你的PostgreSQL postgres的容器中运行。
8. 如何查看docker容器状态
docker ps
docker ps -a
网页链接
参考一下吧
希望可以帮到你