docker exec -it 容器id(或容器名) /bin/bash
查看当前操作系统cat /etc/issue
Debian GNU/Linux 10 \n \l
这里查到的是Debian系统(不是ubuntu, 也不是centos),这里yum是没有的,所以不能用yum安装了,这里用apt-get代替yum
先执行更新apt-get
apt-get update
2)在当前容器目录下(自己的虚拟机:/usr/local/tomcat)
mkdir python3
cd python3/
执行命令:wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
解压:tar -xvf Python-3.6.8.tgz
cd Python-3.6.8/
然后执行:./configure --prefix=/usr/local/tomcat/python3,会报错:configure: error: no acceptable C compiler found in $PATH
apt-get 安装依赖包
这个是因为缺少gcc相关依赖包,使用apt-get代替yum安装相关依赖包
apt-get -y install gcc automake autoconf libtool make
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
apt-get install sudo
make编译安装
./configure --prefix=/usr/local/tomcat/python3 --with-ssl
make
make install
最后:添加软链接
添加python3软链接
ln -s /var/jenkins_home/python3/bin/python3.6 /usr/bin/python3
添加pip3软链接
ln -s /var/jenkins_home/python3/bin/pip3 /usr/bin/pip3
注:
ssl问题
如果pip3安装的时候遇到报ssl相关问题:pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
这个是因为缺少ssl依赖包,网上的解决方案是yum install openssl-devel ,由于Debian系统没有yum,用apt-get安装
apt-get -y install openssl libssl-dev
安装完成之后只能解决系统自带的python2对应的pip安装问题,无法解决python3的pip3安装问题。
解决办法:上面编译的时候需加上参数 --with-ssl
./configure --prefix=/usr/local/tomcat/python3 --with-ssl
重新执行make和make install 就可以了
您好,从DockerHub中拉取Python镜像环境是一个非常简单的过程。首先,您需要确保您的计算机上已经安装了Docker。如果您还没有安装,可以参考Docker官网上的安装指南。安装完成后,您可以在Docker Hub上搜索Python镜像,并选择合适的版本进行拉取。拉取Python镜像的命令如下:docker pull python:<version>
其中,<version>表示您要拉取的Python版本,如3.7.4。拉取完成后,您就可以使用docker run命令来运行Python镜像,并在其中运行Python程序。运行Python镜像的命令如下:
docker run -it python:<version>
运行完成后,您就可以在Python镜像的容器中运行Python程序了。
总之,从DockerHub中拉取Python镜像环境只需要几步简单的操作,您可以轻松完成。
从util-linux版本2.23开始,nsenter工具就包含在其中。它用来访问另一个进程的名字空间。nsenter要正常工作需要有root权限。很不幸,Ubuntu 14.4仍然使用的是util-linux版本2.20。安装最新版本的util-linux(2.24)版,请按照以下步骤:为了连接到容器,你还需要找到容器的第一个进程的PID。
docker inspect --format "{{ .State.Pid }}" <container-id>
通过这个PID,你就可以连接到这个容器:
nsenter --target $PID --mount --uts --ipc --net --pid
nsinit
从0.9版本开始,Docker自身就具有一个管理容器的库,名字为 libcontainer。libcontainer中的nsinit工具允许用户直接访问linux名字空间和cgroup内核。在安装nsinit之前,你首先需要安装Go运行时环境:
apt-get install git golang-go mkdir -p $HOME/go-dev/binmkdir -p $HOME/go-dev/src echo "export GOPATH=\$HOME/go-dev" >>~/.profileecho "PATH=\$PATH:\$GOPATH/bin" >>~/.profile source ~/.profile
接下来才安装nsinit:
mkdir -p $GOPATH/src/github.com/dotcloudcd $GOPATH/src/github.com/dotcloud git clone https://github.com/dotcloud/docker.gitcd $GOPATH/src/github.com/dotcloud/docker /usr/bin/go get -v github.com/dotcloud/docker/vendor/src/github.com/docker/libcontainer/nsinit
nsinit读取的是位于/var/lib/docer/execdriver/native/<container-id>容器目录下的配置数据。要运行nsinit,你需要切换到容器目录下。由于/var/lib/docker目录对于root用户是只读权限,因此你还需要root权限。通过docker的ps命令,你可以确定容器ID。一旦你进入/var/lib/docker目录,你就可以连接容器了:
nsinit exec /bin/bash
lxc(-attach)
直到Docker 0.8.1版本为止,LXC一直是管理容器的基本工具,Docker一直支持这个工具。但是从0.9.0版本开始,Docker默认使用libcontainer管理容器,不再依赖LXC了。因此默认情况下,你不能使用lxc-attach了。
如果你仍然希望使用lxc-attach,那么你需要使用-e lxc选项来重新启动Docker服务进程。使用这个选项,Docker的内部将再次使用LXC管理容器了。完成这个任务最简单的做法就是创建/etc/default/docker文件(如果这个文件仍然不存在),并添加以下内容:
DOCKER_OPTS=" -e lxc"
现在你可以重新启动Docker服务了。要连接容器,你需要知道完整的容器ID:
docker ps --no-trunc
接下来,你就可以连接这个容器了。要完成下面工作,你还需要root权限:
lxc-attach -n <container-id>-- /bin/bash
sshd
上面所有三种方法都要求具有主机系统的root权限。为了不采用root权限,通过ssh访问容器将是一个很好的选择。
要做到这一点,你需要构建一个支持SSH服务的基础映像。此时,我们可能遇到这样的问题:我们是不是用Docker CMD或者ENTRYPOINT运行一条命令就可以了?如果此时有sshd进程运行,那么我们就不要再运行其他进程了。接下来的工作是创建一个脚本或者使用像supervisord这样的进程管理工具来启动其它所有需要启动的进程。有关如何使用supervisord的 优秀的文档可以在Docker的web站点上找到。一旦你启动了具有sshd进程的容器,你就可以像以往一样通过ssh客户端了连接这个容器了。