我正在按照RedhawkSDR的安装说明操作,它依赖于一个Centos7操作系统。由于我的机器使用Ubuntu 22.04,我正在创建一个Docker容器来运行Centos7,然后在其中安装RedhawkSDR。
RedhawkSDR安装说明之一是使用以下命令创建文件:
cat<<EOF|sed 's@LDIR@'`pwd`'@g'|sudo tee /etc/yum.repos.d/redhawk.repo
[redhawk]
name=REDHAWK Repository
baseurl=file://LDIR/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhawk
EOF
如何在创建映像时让Dockerfile执行此命令?
(Also,虽然我可以看到这个命令创建了文件/etc/yum.repos.d/redhawk.repo
,其中包含从[redhawk]到gpgkey=....的行,但我不知道如何解析这个命令,也不知道它到底为什么这样做...)
2条答案
按热度按时间tv6aics11#
使用您选择的文本编辑器,在您的本地系统上创建文件,删除单词
sudo
;给予它一个额外的第一行#!/bin/sh
。使用chmod +x create-redhawk-repo
使其可执行。现在它是一个普通的shell脚本,在您的Dockerfile中,您只需
RUN
它。但是,如果您看看脚本实际执行的操作,它只是将一个文件写入
/etc/yum.repos.d
,并将LDIR
占位符替换为其他目录。Docker映像中的文件系统布局是固定的,大多数情况下没有特别的理由使用环境变量或构建参数来保存文件系统路径。您可以在文件中使用固定路径和Dockerfile中,只需
COPY
该文件,并确保下载的包存档在该目录中。请记住,在Dockerfile中,除非切换到另一个
USER
,否则您是root用户(在这种情况下,您可以使用USER root
切换回来);在Docker中通常根本不需要sudo
,只需删除这些说明中出现的sudo
。6rqinv9w2#
如何在创建映像时让Dockerfile执行此命令?
只需使用
printf
并以单行形式运行以下命令:其中
LDIR
是一个参数,Docker构建过程应如下运行: