【问题标题】:Add to PATH from Laravel Sail Dockerfile从 Laravel Sail Dockerfile 添加到 PATH
【发布时间】:2021-08-15 22:56:26
【问题描述】:

我正在尝试将 sqlpackage 添加到 Laravel Sail Docker。虽然这通常并不难,但 Sail 有点难。

我的 Dockerfile 中有以下部分

RUN curl -L https://go.microsoft.com/fwlink/?linkid=2157202 -o /usr/local/bin/sqlpackage.zip
RUN mkdir /usr/local/bin/sqlpackage
RUN unzip /usr/local/bin/sqlpackage.zip -d /usr/local/bin/sqlpackage
RUN rm /usr/local/bin/sqlpackage.zip
RUN echo "export PATH=\"\$PATH:$HOME/usr/local/bin/sqlpackage\"" >> /home/sail/.bashrc
RUN chmod a+x /usr/local/bin/sqlpackage/sqlpackage

首先,我对自己选择的安装路径不满意 (/usr/local/bin)。但这是我能想到的最好的了。欢迎提出任何建议。

我的第二个也是更重要的问题是我无法在安装时将运行 echo 添加到路径中。安装脚本无法到达主路径。真的很想解决这个问题。但我得到这个错误:

cannot create /home/sail/.bashrc: Directory nonexistent

但是它存在。所以这是安装用户的权利问题。欢迎提出任何建议。

【问题讨论】:

  • 你确定 /home/sail 存在吗?如果没有在导出前创建这样的用户RUN useradd sail
  • 您可以在run echo ... 之前添加run mkdir -p /home/sail/ 以使其存在。另外我建议您将run echo ... 命令更改为RUN echo "export PATH='$PATH:$HOME/usr/local/bin/sqlpackage'" >> /home/sail/.bashrc,但在这种情况下$HOME 表示/root/ 对吗?
  • $HOME 在 echo 导出中不需要
  • 哎呀,错过了。用户风帆稍后创建。你的 cmets 让我意识到这一点。
  • @Matt 我刚刚添加了答案,希望这对美好的一天有所帮助

标签: laravel docker dockerfile laravel-sail


【解决方案1】:

无法创建 /home/sail/.bashrc:目录不存在

看起来用户风帆不存在所以

之前

RUN echo "export PATH=\"\$PATH:$HOME/usr/local/bin/sqlpackage\"" >> /home/sail/.bashrc

如下创建用户

# add user
RUN useradd sail

# and then
RUN echo "export PATH=\"\$PATH:/usr/local/bin/sqlpackage\"" >> /home/sail/.bashrc

$HOME 也不是必需的,因为在构建期间它变成 export PATH="$PATH:/root/usr/local/bin/sqlpackage"

在终端上试试下面(例如我是root用户):

$ echo "export PATH=\"\$PATH:$HOME/usr/local/bin/sqlpackage\"" 
export PATH="$PATH:/root/usr/local/bin/sqlpackage"

在构建过程中类似的方式将使用当前用户,即 root。

首先,我对我选择的安装路径不满意 (/usr/local/bin)。但这是我能想到的最好的了。有什么建议 欢迎光临。

/usr/local/bin 是您添加到系统中的所有附加可执行文件的位置,以供所有用户用作公共系统文件。本地安装的软件必须放在/usr/local内。

# Used for non-system libraries and executables
/usr/local/bin

usr 代表用户系统资源。这是存储系统程序和库的位置。

local 表示标准发行版未附带的资源,通常在每个站点的基础上进行编译和维护。

bin 表示二进制编译的可执行文件。

所以记住这三个

  • /usr/bin:用户命令。
  • /usr/sbin:系统管理命令。
  • /usr/local/bin:本地定制软件。

/opt 是一个用于安装非捆绑包的目录,这些包不属于操作系统发行版,但由独立来源提供。我通常将所有 3rd 方包放在/opt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多