GVKun编程网logo

Dockerfile:RUN导致无操作(dockerfile run)

41

在本文中,我们将带你了解Dockerfile:RUN导致无操作在这篇文章中,我们将为您详细介绍Dockerfile:RUN导致无操作的方方面面,并解答dockerfilerun常见的疑惑,同时我们还将

在本文中,我们将带你了解Dockerfile:RUN导致无操作在这篇文章中,我们将为您详细介绍Dockerfile:RUN导致无操作的方方面面,并解答dockerfile run常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的docker rmi 导致后面的命令不执行问题 Dockerfile 设置时区问题、docker run -v vs Dockerfile的VOLUME、docker run jboss Dockerfile、docker run中-v指令与Dockerfile中volume命令的区别

本文目录一览:

Dockerfile:RUN导致无操作(dockerfile run)

Dockerfile:RUN导致无操作(dockerfile run)

我有一个Dockerfile,其中我试图运行一个启动Java进程的守护进程。

如果我将脚本嵌入到Dockerfile中,就像这样。

RUN myscript.sh

在生成的容器上运行/ bin / bash时, 没有 看到jps中的条目。

但是,在这种情况下,我可以轻松将脚本嵌入为 CMD

docker run asdfg

我看到该过程正常启动。

所以,我的问题是,当我们在 Dockerfile中 启动后台异步进程时,是否总是会从容器中排除其副作用?

答案1

小编典典

后台进程需要在容器启动时启动,而不是在映像生成时启动。因此,您的脚本需要通过CMD或运行ENTRYPOINT

CMD或者ENTRYPOINT仍然可以是包含多个命令的脚本。但是我想在您的情况下,如果您需要多个后台进程,那么使用示例supervisord将是您的最佳选择。

另外,请查看一些已经存在的内容,Dockerfiles以了解它们如何组合在一起。

docker rmi 导致后面的命令不执行问题 Dockerfile 设置时区问题

docker rmi 导致后面的命令不执行问题 Dockerfile 设置时区问题

docker rmi 导致后面的命令不执行问题

把 ca=`docker rmi sendemail-service`

echo $ca
改成
docker rmi sendemail-service -f &
echo ''docker rmi success''

注意:原理的 echo 方式单纯在后面加上 -f & 也是不行的,必须直接执行命令才行

Dockerfile设置时区 ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Dockerfile

FROM java:8
VOLUME /tmp
ADD config/ /config/
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD sendsms-0.0.1-SNAPSHOT.jar sendsms.jar
RUN bash -c ''touch /sendsms.jar''
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /sendsms.jar

run.sh

#!/bin/bash

aa=`docker stop sendsms`
echo $aa
bb=`docker rm sendsms`
echo $bb
docker rmi sendsms-service -f &
echo ''docker rmi success''
b=`docker build -t atomintl/sendsms-service .`
echo $b
docker run -d --name sendsms --restart=always sendsms-service;docker logs -f sendsms

 

docker run -v vs Dockerfile的VOLUME

docker run -v vs Dockerfile的VOLUME

安装卷与docker run -v命令和Dockerfile的VOLUME指令之间是否有任何关系?

最佳答案
-v选项可用于将主机上的目录绑定到容器,但VOLUME指令不能.除此之外,它们是两种不同的方式使容器中的卷可用.

这两个指令都在容器中创建了一个挂载点,但只有-v才能在那里挂载任何东西.

看到:
http://docs.docker.com/engine/reference/builder/#volume和
http://docs.docker.com/engine/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume
有关两者的更深入描述.

docker run jboss Dockerfile

docker run jboss Dockerfile



build (){
    docker build -t "tin/jboss" .
}

download () {
 JAVA_VERSION_MAJOR=8
 JAVA_VERSION_MINOR=101
 JAVA_VERSION_BUILD=13
 JAVA_PACKAGE="jdk"
 curl -jksSLH "Cookie: oraclelicense=accept-securebackup-cookie"\
  http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-b${JAVA_VERSION_BUILD}/${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz
}

# 运行docker
run() {
    docker run  -p 0.0.0.0:8080:8080 -t tin/jboss /bin/bash /jboss/jboss-eap-6.4/bin/standalone.sh -b 0.0.0.0
}

save() {
    docker save  tin/jboss  >  tin_jboss.tar
}

import () {
		 cat tin_jboss.tar | docker import -  tin:jboss
}

docker run中-v指令与Dockerfile中volume命令的区别

docker run中-v指令与Dockerfile中volume命令的区别

volume

Dockerfile中 VOLUME 方式挂载到宿主机上的是匿名卷,在宿主机上是自动匿名挂载到 /var/lib/docker/volumes/ 目录下的,代码如下:

FROM frolvlad/alpine-java:jre8-slim
MAINTAINER oas.cloud
COPY nickdir .
VOLUME /usr/local/oas/file/
WORKDIR /usr/local/oas/

上述 VOLUME /usr/local/oas/file/ 定义的是容器内目录所在路径,在容器创建过程中会在容器中创建该目录,而宿主机上的挂载目录名是随机生成的,
例如:

/var/lib/docker/volumes/593fda6d7b8296bfca22894b326727c734133eebb11c9bc2c25a73b892157a37

上面的目录位于宿主机,对应容器中的 /usr/local/oas/file/ 目录。

docker run -v

docker -v 可以指定挂载到宿主机的具体目录,相对于Dockerfile的 VOLUME 挂载方式更具有可控性,代码如下:

$ docker run —name tengine-web -d -p 9527:80 -p 9000:9000 \
-v /usr/local/tengine/logs:/var/log/nginx \
-v /usr/local/tengine/conf.d:/etc/nginx/conf.d \
-v /usr/local/tengine/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/tengine/html:/usr/share/nginx/html \
-v /usr/local/oas/file:/usr/local/oas/file nginx

上述命令就可以将宿主机的 /usr/local/tengine/logs 等目录挂载到容器的 /var/log/nginx 等对应目录,冒号前为宿主机目录(绝对路径),冒号后为镜像内挂载的路径(绝对路径)。

本文内容均引用自:Dockerfile 中 VOLUME 与 docker -v 的区别说明

今天的关于Dockerfile:RUN导致无操作dockerfile run的分享已经结束,谢谢您的关注,如果想了解更多关于docker rmi 导致后面的命令不执行问题 Dockerfile 设置时区问题、docker run -v vs Dockerfile的VOLUME、docker run jboss Dockerfile、docker run中-v指令与Dockerfile中volume命令的区别的相关知识,请在本站进行查询。

本文标签: