标签: docker

如何将空参数传递给命令

所以我有这个:

export ti_arg='';

if [[ -t 1 ]] ; then
   # allow us to kill container if attached to terminal
   export ti_arg='-ti'
fi

(
  cd "$(dirname "$BASH_SOURCE")"


  docker build <...> '.'


  docker run "$ti_arg" --rm  "test-$commit_id"
)
Run Code Online (Sandbox Code Playgroud)

问题是,即使 $ti_arg 为空,shell 仍然将其视为参数,我得到:

docker:参考格式无效

我能想到的唯一解决方案是 if/else 运行基本相同的 docker 命令(除了那个 arg),或者找到一些可以与 docker 一起使用的传递参数,如下所示:

export ti_arg='--noop';

if [[ -t 1 ]] ; then
   # allow us to kill container if attached to terminal
   export ti_arg='-ti'
fi
Run Code Online (Sandbox Code Playgroud)

有人有好的解决方案吗?我想 CLI 设计总是会--noop为这个用例提供一个标志......现在去更新你自己的所有 CLI 工具

bash zsh shell-script arguments docker

1
推荐指数
1
解决办法
4135
查看次数

Alpine Linux Docker 镜像中包含哪些内容?

官方 Alpine Linux Docker 镜像中包含哪些标准 Linux 命令行工具?

(您所期望的哪些内容缺失了?)

我尝试用谷歌搜索这个但没有成功。

docker alpine-linux

1
推荐指数
1
解决办法
1604
查看次数

为什么要使用替代命令?

我正在按照此站点中有关构建 spring-boot docker 容器的说明进行操作。他们正在使用 CentOS。

在他们的 dockerfile 中,他们多次调用替代命令。我想了解这些陈述的目的。

注意:run 是一个 docker 命令。我对传递给运行的替代命令感兴趣

RUN alternatives --install /usr/bin/java jar /usr/java/latest/bin/java 200000
RUN alternatives --install /usr/bin/javaws javaws /usr/java/latest/bin/javaws 200000
RUN alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
Run Code Online (Sandbox Code Playgroud)

据我所知,他们正在修改符号链接。这是正确的,更重要的是,为什么?

谢谢

马特

alternatives docker

0
推荐指数
1
解决办法
1650
查看次数

带有 apt 包的 Docker 文件

我有以下两个使用 apk 的命令

apk add --no-cache curl && \
    curl -sSLO https://github.com/awslabs/aws-sam-local/releases/download/v${VERSION}/sam_${VERSION}_linux_386.tar.gz && \
    tar -C /usr/local/bin -zxvf /sam_${VERSION}_linux_386.tar.gz && \
    apk del curl && \
    rm -f /sam_${VERSION}_linux_386.tar.gz

# awscli for "sam package" and "sam deploy"
apk add --no-cache py-pip && pip install awscli
Run Code Online (Sandbox Code Playgroud)

我需要使用运行这两个命令apt


相应的命令使用什么apt-get

linux apt docker apk-tools

0
推荐指数
1
解决办法
1149
查看次数

如何在 POSIX shell 中使用字符串评估变量?

我有一个在 ubuntu 容器中运行的脚本:

#!/bin/sh

name=$(cat < /etc/os-release | grep "^NAME" | cut -d "=" -f 2)

if [ $name = "Ubuntu" ] 
then 
  echo "This should return"
else  
  echo "This is wrong"
fi
Run Code Online (Sandbox Code Playgroud)

我通过运行来启动容器:

docker run -it -v $(pwd):/scripts ubuntu:latest /bin/sh /scripts/test.sh
Run Code Online (Sandbox Code Playgroud)

我收到的输出是“这是错误的”,这是不对的,因为我知道 $name 的输出是“Ubuntu”,因为我的笔记本电脑是 Ubuntu,但我找不到其他原因脚本中的路由?它在容器外的笔记本电脑上做同样的事情。

shell ubuntu posix test docker

0
推荐指数
1
解决办法
642
查看次数

获取 Docker 容器内 Raspi 的 CPU 温度

我为我的 Raspberry Pi 4 构建了一个小型 ASP.NET Core 应用程序,它可以让我控制风扇(请参阅此处)。该应用程序部署为一个小型独立 Linux 应用程序,在我的 Raspi 裸机上运行。

为了测量温度,我调用vcgencmd measure_temp了 Raspi,它为我提供了实际温度。

由于各种原因,我更喜欢在 Docker 容器中运行此应用程序:

  • Linux 中不再需要手动注册服务,Docker 功能--restart-always可以处理这个问题。
  • 不再需要从 GitHub 下载最新版本、提取应用程序并将其标记为可执行文件。

但我不知道如何从容器内检索 Raspi 的温度。

我已经尝试将 Raspi 的目录映射到 Docker 容器并从内部调用/usr/bin/-但由于缺少依赖项而失败。 我已经在 Stack Overflow 上找到了一个答案,建议在 Raspi 上创建一个命名管道,然后从容器内使用该管道。但是,如果我必须设置诸如命名管道之类的东西,这就会消除容器的美感。/opt/vc/bin/vcgencmd

长话短说:有没有办法从 Docker 容器内获取 Raspi 当前的 CPU 温度?

谢谢!

container raspberry-pi docker

0
推荐指数
1
解决办法
1628
查看次数

Docker架构中实际的可执行程序代码位于哪里?

我是 Docker 的新手,所以这似乎是一个愚蠢的问题,但我就是想不通。我已经了解到,docker 映像包含运行应用程序所需的压缩库和依赖项,并且容器是从这些映像创建的。

但是,我不明白的是图像中的压缩代码最终如何在容器内执行。在之前的研究中,我发现容器在其文件系统中包含此代码的副本,并且它们向此代码添加了一个写入层以便可以运行。这就是为什么我发现在实践中图像占用的存储空间比基于它们的容器的整个文件系统要多得多的存储空间,我感到很奇怪。您可能会期望,由于容器的文件系统中包含解压缩的代码,因此这些容器将比它们的映像大得多。

可能,我完全误解了 docker 的工作原理,但是有人可以帮助我吗?提前致谢!

docker

0
推荐指数
1
解决办法
81
查看次数

从 Linux 的角度来看,docker 容器是什么?

docker 容器是 docker daemon 所理解的概念。从 Linux 的角度来看,docker 容器是什么?

  1. 您可以停止、杀死和销毁容器。容器本身是一个过程吗?
  2. docker 容器到底是一个 cgroup 吗?或者可以通过cgroup识别?

    docker 容器是否正是在容器中运行的一组进程?

    如何从彼此中找出 cgroup 和容器(ID)?

谢谢。

container cgroups linux-kernel docker

-3
推荐指数
1
解决办法
150
查看次数