公司服务器已经安装docker,
1,执行命令docker version报错
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
原因:
docker service
未启动
执行命令
service docker start
选择对应的用户之后显示授权通过,执行docker ps命令依然报错
Got permission denied while trying to connect to the Docker daemon socket
切换到sudo执行命令 正常,
原因是docker进程使用 Unix Socket 而不是 TCP 端口。而默认情况下,Unix socket 属于 root 用户,因此需要 root权限 才能访问。
sudo docker ps
sudo docker version
至于里面的各个含义,可以参考这儿
2,要把自己的项目放进docker,需要构建自己项目的环境,相当于在一个单独隔离的空间中装一个centos系统+常用的各种命令+项目运行需要的包
手把手教你用 Docker 构建自己的 CentOS 基础镜像
2.1具体执行命令,编写Dockerfile
mkdir docker
cd docker
touch Dockerfile
然后pycharm,新建一个文件,命名Dockerfile。打开Dockerfile,编写
FROM centos:centos7.1.1503
USER root
#RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum swap -y fakesystemd systemd && yum clean all && \
yum update -y && yum clean all && \
yum update -y && yum install telnet -y
RUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man && \
yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel && \
# -O 将下载的文件存放到指定的文件夹下,同时重命名下载的文件
curl -o ~/miniconda.sh -O https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
chmod +x ~/miniconda.sh && \
~/miniconda.sh -b -p /opt/conda && \
rm -rf ~/miniconda.sh
ENV PATH /opt/conda/bin:$ PATH
报错/bin/sh xxxx returned a non-zero code: 1
这种错误检查一下dockerfile是不是写错了,我的是两条RUN命令中间多了一个 && \
(上面是最终执行正确的Dockerfile版本)
2.2编写完之后,构建镜像
在Dockerfile所在的目录下执行命令
sudo docker build -t cenmiconda/centos:7.1 .
解释:最后的cenmiconda/centos:7.1
是镜像的标签,.
表示当前目录,如果是执行其他目录下的Dockerfile,则切换为Dockerfile所在的目录。
执行完之后出现下面的内容,表示创建镜像成功
Successfully built 6b843a053081
Successfully tagged cenmiconda/centos:7.1
2.3根据镜像,创建容器
创建容器,未指定端口映射
sudo docker run -d --name nttcenbase cenmiconda/centos:7.1
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2de2a89864ae cenmiconda/centos:7.1 "/bin/bash" 8 seconds ago Exited (0) 6 seconds ago
镜像创建容器后台运行成功以后,发现容器没有预期中的后台运行,而是直接挂掉了,docker ps -a发现容器已经运行结束了
后来发现原因是 Docker容器后台运行,就必须有一个前台进程!容器运行的命令如果不是那些一直挂起的命令(比如运行top,ping),就是会自动退出的。
最简单的方法就是 如:sudo docker run -d --name nttcenbase cenmiconda/centos:7.1
改成 sudo docker run -dit --name nttcenbase cenmiconda/centos:7.1
就行了,或改成sudo docker -d --name nttcenbase cenmiconda/centos:7.1 tail -f /dev/null
https://blog.csdn.net/jamesdodo/article/details/106075462
然后删除容器,重新执行run
sudo docker rm -f nttcenbase
sudo docker -dit --name nttcenbase cenmiconda/centos:7.1
执行命令进入启动的容器
-it 代表交互式启动,nttcenbase为容器名称,/bin/bash为启动后交互命令的方式
sudo docker exec -it nttcenbase /bin/bash
进入容器后退出
exit
我们可以通过inspect查看一下容器的网络信息
sudo docker network inspect bridge
通过宿主机访问一下容器IP地址及端口,可以ping通
ping 172.17.0.2
3.容器内安装redisCentOS7系统安装配置Redis
4,解决容器启动时间错误的问题
在容器中执行下面命令,链接宿主机localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime