信息 Docker version 18.06.0-ce, build 0ffa825 错误信息 能够在shell中使用docker version打印版本号,但是无法执行docker,报错信息如下...+ docker run -i --rm --name my-node-8 -u 0 -v /var/lib/jenkins/workspace/hexo-blogs:/usr/src/myapp -w...to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.38...name=my-node-8: dial unix /var/run/docker.sock: connect: permission denied....解决方法 将jenkins用户加入docker组 重启Jenkins服务 sudo gpasswd -a jenkins docker sudo service jenkins restart
问: 在 Bash shell 脚本中什么命令检查某个目录是否存在?...在 Unix 的早期设计中,许多系统资源都被抽象为文件,以实现统一和一致的接口处理,这样程序员可以使用相同的系统调用来操作不同的资源,如普通文件、目录、设备等。...这里顺便整理一下 Bash 中对文件的各种测试: -a file -- 如果文件存在则为真。 -b file -- 如果文件存在且为块特殊文件则为真。...-N file -- 如果文件存在且自上次读取后已被修改则为真。 -O file -- 如果文件存在且属于有效用户ID所有则为真。...参考文档: stackoverflow question 59838 https://www.gnu.org/software/bash/manual/bash.html#Bash-Conditional-Expressions
3.基于docker启动的部署脚本 有些项目团队喜欢使用docker启动java服务,那么我们同样可以将上述脚本稍做改造,来实现基于shell+docker的简单项目部署能力。...$(docker images | awk '/^/ { print $3 }') docker run -v /mnt:/mnt -p $3:$3 --restart=always --name...服务镜像,并定义传入三个入参 停止老的docker中的java服务容器,并移除 找到老的java服务镜像,并移除 启动新的java服务容器,启动成功后打印启动成功日志 执行start.sh脚本打包部署:...减少依赖:使用shell脚本可以减少对Jenkins的依赖,特别是在需要迁移或者更换持续集成工具时,减少了迁移的复杂性。...学习成本:对于不熟悉shell脚本的团队成员来说,需要花费额外的时间和精力学习shell脚本语法和编写规范。
通常是因为我们的业务进程是在脚本中启动的,容器的启动入口使用了脚本,所以容器中的主进程并不是我们所希望的业务进程而是 shell 进程,比如下面的 Dockerfile: FROM centos:7 ADD...CMD ["/start.sh"] 在 start.sh 脚本中运行二进制以启动业务进程: #! /bin/bash ......使用 exec 启动 在 shell 中启动二进制的命令前加一个 exec 即可让该二进制启动的进程代替当前 shell 进程,即让新启动的进程成为主进程: #! /bin/bash ......这个时候我们可以在 shell 中使用 trap 来捕获信号,当收到信号后触发回调函数来将信号通过 kill 传递给业务进程,脚本示例: #!...和 tini 都可以作为 init 进程,作为主进程 (PID 1) 在容器中启动,然后它再运行 shell 来执行我们指定的脚本 (shell 作为子进程),shell 中启动的业务进程也成为它的子进程
二、分析 主要原因就是当你在后台运行的时候,这个镜像创建的容器会首先执行/bin/bash,这意味着,当在后台运行(-d)时,shell立即退出。...所以除非命令未在前台运行,否则容器会立即停止 注意到:当我们在本地 执行 yarn start 后,终端会刷新,然后启动程序,看起来在这个过程中类似“ 原先的终端终止后,又启动了新的终端窗口 ”。...而如果是在docker容器中,即导致容器的运行终止了。...Docker中系统镜像的缺省命令是 bash,如果不加 -ti bash 命令执行了自动会退出。这是因为如果没有衔接输入流,本身就会马上结束。...加-ti 后docker命令会为容器分配一个伪终端,并接管其stdin/stdout支持交互操作,这时候bash命令不会自动退出。
启动里面的 bash 并且进行交互式操作:docker run -it --rm ubuntu:latest bash图片-it:这是两个参数,一个是 -i 交互式操作,一个是 -t 终端--rm:这个参数是说容器退出后随之将其删除...ubuntu:latest:这是指用 ubuntu:latest 镜像为基础来启动容器bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash可以通过 exit 退出容器...例如 docker run hello-world 会把日志打印在控制台:图片而 docker run -d hello-world 只会打印 容器id。...,其实还可以通过镜像的ID去运行一个容器如下所示:docker run -it 845c6a20ad11 /bin/bash图片删除容器删除一个处于终止状态的容器docker container rm...图片容器生命周期图片create:创建容器,并没有启动kill:发出的是 sigkill 的信号,是无条件终止的信号stop:发出的是 sigterm 的信号,程序终结信号,可以在退出的时候,被阻塞,可以做一些清理工作我正在参与
RUN npm install:在 /app 目录下,运行 npm install 命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。...container run 命令的 --rm 参数,在容器终止运行后自动删除容器文件。...你可能会问,RUN 命令与 CMD 命令的区别在哪里?简单说,RUN 命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD 命令则是在容器启动后执行。...# 由镜像来启动一个容器 $ docker run 镜像ID/镜像名:Tag # 启动镜像可以添加的参数 -d(在后台运行容器,守护进程) -it(容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令...在容器终止运行后自动删除容器文件) -v 本机地址:容器地址(将主机的文件或目录挂载到容器里(只有一份源文件)) # 终止容器 $ docker stop 容器ID # 终止所有容器(先查询出所有的容器
i 让容器的标准输入保持打开 # -t 让Docker分配一个伪终端,并绑定到容器的标准输入上 # /bin/bash 指定docker容器,用shell解释器交互 当利用docker...执行完毕后容器被终止 2)将一个终止状态(stopped)的容器重新启动 [root@localhost ~]# docker ps -a # 先查询记录 CONTAINER ID IMAGE...RUN:执行命令并创建新的Image Layer CMD:设置容器启动后默认执行的命令和参数 ENTRYPOINT:设置容器启动时运行的命令 Shell格式和Exec格式 RUN yum install...ENTRYPOINT 让容器以应用程序或服务形式运行 不会被忽略,一定会执行 最佳实践:写一个shell脚本作为entrypoint COPY docker-entrypoint.sh /usr/local...官方网站(需注册使用) https://hub.docker.com/ # 注册docker id后,在linux中登录dockerhub docker login # 注意要保证image
i 让容器的标准输入保持打开 # -t 让Docker分配一个伪终端,并绑定到容器的标准输入上 # /bin/bash 指定docker容器,用shell解释器交互 当利用docker...从地址池配置一个ip地址给容器 执行用户指定的应用程序 执行完毕后容器被终止 2、将一个终止状态(stopped)的容器重新启动 [root@localhost ~]# docker ps -a #...ENTRYPOINT RUN:执行命令并创建新的Image Layer CMD:设置容器启动后默认执行的命令和参数 ENTRYPOINT:设置容器启动时运行的命令 Shell格式和Exec格式 RUN...ENTRYPOINT 让容器以应用程序或服务形式运行 不会被忽略,一定会执行 最佳实践:写一个shell脚本作为entrypoint COPY docker-entrypoint.sh /usr/local...https://hub.docker.com/ # 注册docker id后,在linux中登录dockerhub docker login # 注意要保证image的tag是账户名,如果镜像名字不对
有些容器提供服务,并不会自动终止,如Ubuntu的image: [@sjs_123_183 ~]# docker container run -it ubuntu bash root@cd902f829884...中写入下面两行,保存退出: FROM nginx RUN echo 'Hello, Docker!...RUN 就像 Shell 脚本一样可以执行命令,很多初学者在写Dockerfile的时候会像Shell 脚本一样把每个命令对应一个 RUN,比如这样: FROM debian:jessie RUN apt-get...在撰写 Dockerfile 的时候,要经常提醒自己,这并不是在写 Shell 脚本,而是在定义每一层该如何构建。 (2)这里为了格式化还进行了换行。...比如有些初学者在发现 COPY /opt/xxxx /app 不工作后,于是干脆将 Dockerfile 放到了硬盘根目录去构建,结果发现 docker build 执行后,在发送一个几十 GB 的东西
让容器的标准输入保持打开 # -t 让Docker分配一个伪终端,并绑定到容器的标准输入上 # /bin/bash 指定docker容器,用shell解释器交互 当利用docker run...从地址池配置一个ip地址给容器 执行用户指定的应用程序 执行完毕后容器被终止 2、将一个终止状态(stopped)的容器重新启动 [root@localhost ~]# docker ps -a #...RUN:执行命令并创建新的Image Layer CMD:设置容器启动后默认执行的命令和参数 ENTRYPOINT:设置容器启动时运行的命令 Shell格式和Exec格式 RUN yum install...ENTRYPOINT 让容器以应用程序或服务形式运行 不会被忽略,一定会执行 最佳实践:写一个shell脚本作为entrypoint COPY docker-entrypoint.sh /usr/local...://hub.docker.com/ # 注册docker id后,在linux中登录dockerhub docker login # 注意要保证image的tag是账户名,如果镜像名字不对,
i 让容器的标准输入保持打开 # -t 让Docker分配一个伪终端,并绑定到容器的标准输入上 # /bin/bash 指定docker容器,用shell解释器交互 当利用docker...执行完毕后容器被终止 2、将一个终止状态(stopped)的容器重新启动 [root@localhost ~]# docker ps -a # 先查询记录 CONTAINER ID IMAGE...RUN:执行命令并创建新的Image Layer CMD:设置容器启动后默认执行的命令和参数 ENTRYPOINT:设置容器启动时运行的命令 Shell格式和Exec格式 RUN yum install...ENTRYPOINT 让容器以应用程序或服务形式运行 不会被忽略,一定会执行 最佳实践:写一个shell脚本作为entrypoint COPY docker-entrypoint.sh /usr/local...//hub.docker.com/ # 注册docker id后,在linux中登录dockerhub docker login # 注意要保证image的tag是账户名,如果镜像名字不对,需要改一下
,允许对容器内的标准输入(STDIN)进行交互 $ docker run -it ubuntu /bin/bash # 可以通过运行exit命令或者使用 CTRL+D 来退出容器 输出提示以后,hello...CMD ["python", "app.py"] ENTRYPOINT,设置容器启动时运行的命令,让容器以应用程序或服务的形式运行,不会被忽略,推荐写一个 shell 脚本作为 entrypoint COPY...image文件 EXPOSE 暴露3000端口,允许外部连接这个端口 CMD npm start 在容器启动后执行,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令,指定了...CMD命令后,docker container run 命令就不能附加命令(如 /bin/bash),否则会覆盖CMD命令 6.4 创建 image # -t 指定image镜像的名称,后面还可以加冒号指定标签...端口映射为本机的3333端口 # /bin/bash 容器启动后执行的第一个命令,会覆盖文件中配置的CMD # --rm 在容器终止运行后自动删除容器文件 $ docker container run
有些容器不会自动终止,因为它们提供的是服务例如网站容器和虚拟操作系统容器,运行ubuntu的容器,docker会从镜像仓库下载ubuntu的镜像,下载完成后直接从ubuntu镜像运行容器实例: docker...-it:Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器 bash: launches a Bash shell inside our container....输入exit或按Ctrl+D可退出此ubuntu容器实例进程,此种方式依赖命令行运行,命令行退出则容器进程终止(使用Ctrl+P+Q也可退出容器且不关闭容器)。...,使用nohup使得java程序运行于后台,不至于命令行退出java程序终止。...run -p 8000:8000 -itd maven-quiz -docker run:运行容器 -p:指定本地:容器端口映射 -itd:容器在后台运行 maven-quiz:指定镜像,:后加标签,
注意:当你运行一个Docker容器时,镜像的ENTRYPOINT就是你的根进程,即PID 1(如果你没有ENTRYPOINT,那么CMD就会作为根进程,你可能配置了一个shell脚本,或其他的可执行程序...:第一个问题是:如果将Bash作为PID 1运行,那么发送到Docker容器docker stop的信号,最终都是将 SIGTERM信号发送到Bash,但是Bash默认不会处理SIGTERM信号,也不会将它们转发到任何地方...docker stop命令执行后,容器会有一个关闭的时限,默认为10秒,超过十秒则用kill强制关闭。...第二个问题是:一旦进程退出,Bash也会继续退出。...如果程序出了bug退出了,Bash会退出,退出代码为0,而进程实际上崩溃了(但0表示“一切正常”;这将导致Docker或者k8s上重启策略不符合预期)。
--rm:这个参数是说容器退出后随之将其删除 ubuntu:16.04:这是指用ubuntu:16.04镜像为基础来启动容器。...bash:放在镜像名后的是命令,这里我们希望有个交互式shell,因此用的是bash。 最后我们通过exit退出了这个容器。...新建并启动 docker run 输出一个“Hello World”,之后终止容器。...docker run ubuntu:16.04 /bin/echo "Hello world" 启动已终止容器 docker container start 或者 docker start 启动一个bash...如果不使用-d参数运行容器,比如docker run hello-world会把日志打印在控制台。
docker container run hello-world 一般容器会自动终止,不能自动的手动kill它 docker container kill [containID] 容器文件 image...RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。...it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。...这里是启动 Bash,保证用户可以使用 Shell docker container run -p 8000:3000 -it react-commentlist:v0.1 /bin/bash 可以在后面输入...容器退出 Ctrl + c 停止 Node 进程 Ctrl + d (或 exit)退出容器
docker run -t -i centos /bin/bash:启动一个bash 终端, 允许用户进行交互: -t 选项让Docker分配一个伪终端( pseudo-tty) 并绑定到容器的标准输入上...1) 例如只启动了一个终端的容器:docker run -t -i centos /bin/bash .用户通过 exit 命令或 Ctrl+d 来退出终端时, 所创建的容器立刻终止。...而且也不会像attach方式因为退出,导致 整个容器退出。 这种方式可以替代ssh或者nsenter、nsinit方式,在容器内进行操作。...:构建镜像时执行的命令 RUN用于在镜像容器中执行命令,其有以下两种命令执行方式: shell执行 格式: RUN exec执行 格式: RUN ["executable...镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。