环境:centos7 docker升级为最新版,
docker升级方法参考:《centos7 docker升级到最新稳定版本》centos7 docker升级到最新稳定版本_whatday的专栏-CSDN博客_centos7哪个版本稳定
以tomcat容器为例:
docker run --name web --privileged -v /etc/localtime:/etc/localtime:ro -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -d -p 8080:8080 tomcat:8.5.35
重点:
1.将宿主机 /var/run/docker.sock 文件挂载到容器,实现容器内 docker 操作宿主机 docker 的目的
2.将宿主机 /usr/bin/docker 文件挂载到容器,直接当docker客户端使用。
宿主机docker列表:
tomcat容器内docker列表:
可以看到完全一样,
此时可以在 tomcat 容器中调用 其他容器 内的程序,示例如下:
docker exec 其他容器 /bin/bash -c 'cd /packages/detectron && python tools/train.py'
注意事项:
1.-it 有可能造成命令不执行,特别是在程序调用时,确认的确需要再加上-it
2.如果程序调用脚本,脚本中,在 -c ''中用到变量如$1,将不会传递,因为这个shell变量到了其他容器内并不存在,可用映射目录临时文件存储变量的方式来传递。
具体可参考:《docker 在容器外执行某个容器内的某个命令》docker 在容器外执行某个容器内的某个命令_whatday的专栏-CSDN博客_docker 外部执行命令