首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

02 Aug 2019 docker运行shell脚本问题

run demo standard_init_linux.go:207: exec user process caused "exec format error" 这时候发现容器运行失败,打印了一个错误信息...:standard_init_linux.go:207: exec user process caused "exec format error",如果对docker比较熟悉的话,大概知道这句话原因一般都是因为平台不兼容导致...,比如在amd64上面运行了一个arm程序,会打印这种错误。.../test.sh run test.sh done / # 发现脚本也能正常运行,到这里,大家应该能猜测到问题所在了,就是顶部的注释导致的。...如果docker直接运行shell脚本,且脚本顶部不是正确的shebang的话,就会出现这种错误。这是最近工作中遇到的一个小问题,当时由于环境复杂,没有及时定位出原因。

29330

创建自己的Docker基础镜像

,在运行的时候会遇到下面的错误。...standard_init_linux.go:190: exec user process caused "exec format error" 查看这个文件的信息是 hello: Mach-O 64...而Linux内核仅提供了进程管理、内存管理、文件系统管理等一些基础的管理模块。除此之外,我们还需要一些Linux下的管理工具,包括ls、cp、mv、tar以及应用程序运行依赖的一些包。...依赖的镜像可以是本地的,也可以是远程库的 ADD 指的是添加本地文件到镜像中,如果遇到linux可解压格式文件,会自动解压,这就是为什么整个文件中没有对tar.gz进行显式解压 RUN 运行命令,如安装软件的相关命令...CMD 设置启动Container时默认执行的命令,这个可以在启动容器时覆盖 相关的命令 # 查看容器的日志 $ docker logs b4ce4d2d7cb6 standard_init_linux.go

2.7K20

K8S环境的Jenkin性能问题处理

执行命令docker exec f9ae211abe99 jps查看容器内所有java进程的PID,如下图,可见Jenkins服务在容器内的PID等于6: ?...知道了容器ID和java进程的PID,就可以查看JVM信息了,执行命令docker exec f9ae211abe99 jstat -gcutil 6 3s 99查看GC情况,如下图,除了YGC频繁,还出现了...再用命令docker exec f9ae211abe99 jmap -heap 6查看JVM内存情况,如下图,年轻代太小了,只有100兆: ?...最后用命令docker exec f9ae211abe99 ps -ef | grep java查看该进程的启动命令,如下图,可见启动该java进程时没有指定内存参数: ?...再来看看该进程的启动命令,执行命令docker exec 591dc47d4d57 ps -ef|grep java,如下图红框所示 ,刚才设置的内存参数已经被用在启动命令中了: ?

1.1K10

Docker学习笔记之docker volume 容器卷的那些事(二)

突然有一天冒出这样的错误: level=info ts=2017-12-22T12:40:09.154479277Z caller=main.go:314 msg="Starting TSDB" level...$ docker run --name data_container --entrypoint="" prom/prometheus:v2.0.0 ls 然后再次执行: $ docker run --rm...切换用户 有没有更好的方式去实现呢?有的,这种方式较第一种优点是自动化,不需要手动更改文件权限。具体流程是: 切换为 root 用户。 更改目录权限到当前非 root 用户。...我们查看下映射到宿主机上的目录: $ ls -al data drwxr-sr-x 3 nobody root 80 Jan 11 11:09 data # 进入容器查看进程...注意,standard_init_linux.go:195: exec user process caused "exec format error" 得到这个错误,可能是你没有指定运行 entrypoint.sh

1.3K20

Docker实践之03-Dockerfile指令详解

在指令格式上,一般推荐使用exec格式,这类格式在解析时会被解析为JSON数组,因此一定要使用双引号,而不要使用单引号。...ENTRYPOINT,入口点 ENTRYPOINT的格式和RUN指令格式一样,分为exec格式和shell格式。...之前提到一些初学者常犯的错误是把Dockerfile等同于Shell脚本来书写,这种错误的理解还可能会导致出现下面这样的错误: RUN cd /app RUN echo "hello" > world.txt...这就是对Dockerfile构建分层存储的概念不了解所导致错误。 之前说过每一个RUN都是启动一个容器、执行命令、然后提交存储层文件变更。...在1.12以前,Docker不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求。

88031

TKEStack适配ARM架构之路

对于容器镜像,跨架构执行则会报:standard_init_linux.go:211: exec user process caused "exec format error"类似错误。...如果平时遇见了上述错误,那一定是执行了架构不匹配的文件或容器镜像。...另外x86组件跟arm组件分别命名,这导致使用到这些组件的代码都要仔细重构或校验,以确保代码里使用了正确的版本,这也给代码维护人员带来了负担。...的自研组件已经全量容器化了,所以TKEStack适配arm的核心就在于如何能够以统一的方式构建多个架构(x86 / arm)的容器镜像,并且在使用到这些容器镜像的地方,都能最小化代码改动,不因引入多个架构而导致部署容器时使用到错误的版本...也就是说,从用户的角度来看,不用担心架构的差异,服务端会为用户屏蔽掉架构的区别。

1.9K21

一步步学KubeVirt CI (3) - gosu在容器中的使用

因为: gosu启动命令时只有一个进程,所以docker容器启动时使用gosu,那么该进程可以做到PID等于1; sudo启动命令时先创建sudo进程,然后该进程作为父进程去创建子进程,1号PID被sudo...进程占据; 拿经典的redis镜像举例 首先得了解RUN CMD ENTRYPOINT区别 三者的共同点是:都是执行命令;都有两种格式Shell格式Exec格式。...上面的需要root处理的步骤放这一段,后面启动redis-server用了非root用户启动。原因是下面的docker-entrypoint.sh脚本: entrypoint.sh #!...-user redis是找出当前目录的所有非redis用户文件,-exec chown redis '{}' +是将找出的文件修改成redis用户所有。...exec gosu redis " 第二次执行CMD+ENTRYPOINT,因为是redis用户执行的,所以不进入if语句,直接exec " 该脚本的内容就是根据 CMD 的内容来判断,如果是 redis-server

1.2K31

Docker Dockerfile 指令详解与实战案例

之前提到一些初学者常犯的错误是把 Dockerfile 等同于 Shell 脚本来书写,这种错误的理解还可能会导致出现下面这样的错误: 1 RUN cd /app 2 RUN echo "hello"...这就是对 Dockerfile 构建分层存储的概念不了解所导致错误。 之前说过每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。...USER 指定当前用户 格式:USER [:] USER 指令和 WORKDIR 相似,都是改变环境状态并影响以后的层。...ENTRYPOINT 入口点 ENTRYPOINT 的格式和 RUN 指令格式一样,分为 exec 格式和 shell 格式。...在指令格式上,一般推荐使用 exec 格式,这类格式在解析时会被解析为 JSON 数组,因此一定要使用双引号 “,而不要使用单引号。

1.5K23

docker | dockerfile最佳实践

如果 ENTRYPOINT 使用了 exec 模式,CMD 也应该使用 exec 模式。...真实的情况要远比这三条规律复杂,好在 docker 给出了官方的解释,如下图所示: 容器的优雅退出 众所周知,docker容器本质上是一个个进程进程的优雅退出需要考虑的是如何正确处理 SIGTERM...应用程序如何获取信号 docker 容器的一号进程是由 CMD ENTRYPOINT 这两个指令决定的,所以正确使用这两个指令十分关键 CMD 和 ENTRYPOINT 分别都有 exec 和 shell...两种格式: 使用 exec 格式时,我们执行的命令就是一号进程 使用 shell 格式时,实际会以 /bin/sh -c command arg......的方式运行,这种情况下容器的一号进程将会是 /bin/sh,当收到信号时 /bin/sh 不会将信号转发给我们的应用程序,导致意料之外的错误,所以十分不推荐使用 shell 格式 我们还可以使用 tini

92910

减小镜像体积-docker最佳实践

/hello 如果我们执行以上构建出的镜像,会提示以下错误: 12 ➜ go-hello-world docker run go-hello:scratch.stringsyntaxdocker:...没有调试工具 因为scratch是空的,所以构建出的镜像不包含任何工具,如ls,ps,ping等,我们也就无法进入到该容器(docker exec)中。...Hello World能够使用scratch基础镜像执行,但是C Hello World和一些其他复杂的Go程序(使用net包,或者使用sqlite), 往往不能成功执行,会产生如以下的报错: 1 standard_init_linux.go...:211: exec user process caused "no such file or directory" 似乎是缺少了一些文件导致的,但是又没具体指出缺失了什么文件。...这取决于我们具体使用的构建工具,如果使用gcc,可以通过-static实现静态链接: 1 gcc -o hello hello.c -static 最终构建的二进制文件大小760KB而不16KB,主要是嵌入的库文件导致镜像变大

1.3K10

初识Docker

用户计算机的环境不相同,可能导致软件无法运行。 要使软件运行正确,用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。 那么怎么才能解决这个大问题呢?...容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。...其命令格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] Docker 镜像仓库地址:地址的格式一般是 [:端口号]...exec 命令 docker exec 后边可以跟多个参数,常用参数为-i -t 参数。...例: docker exec -it ubuntu_test bash 如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用 docker exec 的原因。

36030

Doker容器

注1:可以使用 docker container wait container命令来等待容器退出和查看退出的返回结果 注2:某些情况下,执行 run 命令是无法正常运行,导致容器直接退出,这个时候我们可以查看推出的错误代码...,下面列出常见的几种错误代码: 代码 说明 125 docker daemon 执行错误 126 所指定的命令无法执行 127 无法找到容器内的命令 进入守护状态 在实际开发中需要容器一直运行着...四、进入容器 进入容器docker 官方推荐使用 attach 和 exec 命令 attach 该命令是docker 自带的命令,语法格式如下: docker [container] attach...exec 该命令是docker最新支持的命令,因为 attach 命令在多窗口的情况下会出现所有窗口同步显示,当某个窗口阻塞时,其他窗口无法使用,因此 exec 命令出现了。...查看进程 有时我们需要确定容器内应用是否在运行,这时我们可以使用查看进程命令 top ,语法如下: docker [container] top 例如我们查看容器 ubuntu16.04 中的进程信息

73710
领券