所以我有这个:
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 工具
官方 Alpine Linux Docker 镜像中包含哪些标准 Linux 命令行工具?
(您所期望的哪些内容缺失了?)
我尝试用谷歌搜索这个但没有成功。
我正在按照此站点中有关构建 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)
据我所知,他们正在修改符号链接。这是正确的,更重要的是,为什么?
谢谢
马特
我有以下两个使用 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?
我有一个在 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,但我找不到其他原因脚本中的路由?它在容器外的笔记本电脑上做同样的事情。
我为我的 Raspberry Pi 4 构建了一个小型 ASP.NET Core 应用程序,它可以让我控制风扇(请参阅此处)。该应用程序部署为一个小型独立 Linux 应用程序,在我的 Raspi 裸机上运行。
为了测量温度,我调用vcgencmd measure_temp了 Raspi,它为我提供了实际温度。
由于各种原因,我更喜欢在 Docker 容器中运行此应用程序:
--restart-always可以处理这个问题。但我不知道如何从容器内检索 Raspi 的温度。
我已经尝试将 Raspi 的目录映射到 Docker 容器并从内部调用/usr/bin/-但由于缺少依赖项而失败。
我已经在 Stack Overflow 上找到了一个答案,建议在 Raspi 上创建一个命名管道,然后从容器内使用该管道。但是,如果我必须设置诸如命名管道之类的东西,这就会消除容器的美感。/opt/vc/bin/vcgencmd
长话短说:有没有办法从 Docker 容器内获取 Raspi 当前的 CPU 温度?
谢谢!
我是 Docker 的新手,所以这似乎是一个愚蠢的问题,但我就是想不通。我已经了解到,docker 映像包含运行应用程序所需的压缩库和依赖项,并且容器是从这些映像创建的。
但是,我不明白的是图像中的压缩代码最终如何在容器内执行。在之前的研究中,我发现容器在其文件系统中包含此代码的副本,并且它们向此代码添加了一个写入层以便可以运行。这就是为什么我发现在实践中图像占用的存储空间比基于它们的容器的整个文件系统要多得多的存储空间,我感到很奇怪。您可能会期望,由于容器的文件系统中包含解压缩的代码,因此这些容器将比它们的映像大得多。
可能,我完全误解了 docker 的工作原理,但是有人可以帮助我吗?提前致谢!
docker 容器是 docker daemon 所理解的概念。从 Linux 的角度来看,docker 容器是什么?
docker 容器到底是一个 cgroup 吗?或者可以通过cgroup识别?
docker 容器是否正是在容器中运行的一组进程?
如何从彼此中找出 cgroup 和容器(ID)?
谢谢。
docker ×8
container ×2
alpine-linux ×1
alternatives ×1
apk-tools ×1
apt ×1
arguments ×1
bash ×1
cgroups ×1
linux ×1
linux-kernel ×1
posix ×1
raspberry-pi ×1
shell ×1
shell-script ×1
test ×1
ubuntu ×1
zsh ×1