【问题标题】:Run script into Docker在 Docker 中运行脚本
【发布时间】:2021-08-04 14:42:06
【问题描述】:

我有 Dockerfile

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y software-properties-common curl gnupg2 && \
  curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add - && \
  apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" && \
  apt-get update && apt-get install -y \
  vault && \
  setcap cap_ipc_lock= /usr/bin/vault

COPY run.sh ./

CMD ./run.sh

还有我的 run.sh 文件

#!/bin/bash

VAULT_RETRIES=5
echo "Vault is starting..."
until vault status > /dev/null 2>&1 || [ "$VAULT_RETRIES" -eq 0 ]; do
        echo "Waiting for vault to start...: $((VAULT_RETRIES--))"
        sleep 1
done

echo "Authenticating to vault..."
vault login token=vault-plaintext-root-token

echo "Initializing vault..."
vault secrets enable -version=2 -path=my.secrets kv

echo "Adding entries..."
vault kv put my.secrets/dev username=test_user
vault kv put my.secrets/dev password=test_password

echo "Complete..."

当我运行 docker 时我遇到了问题 -

/bin/sh: 1: ./run.sh: 未找到

如果我替换

CMD ./run.sh

开

运行 chmod +x run.sh

容器运行没有问题,但脚本不起作用,因为我在终端回显命令中看不到

【问题讨论】:

  • 用RUN 替换CMD 没有任何意义——这两个命令做的事情非常不同。 CMD 表示“在容器启动时运行此命令”,而RUN 表示“现在在构建映像时运行此命令”。
  • WORKDIR 是什么?您是否尝试在 CMD 中给出run.sh 的绝对路径?

标签: linux bash docker


【解决方案1】:

我的问题出在#!/bin/bash。我在#!/bin bash 上重写了这个,我的脚本正在寻找。但我有第二个问题是 - exec user process caused "permission denied"。此问题已解决 - 我在 Dockerfile 中添加了 RUN chmod +rx run.sh 命令,脚本编码应为 utf-8 + BOM(适用于 Windows)。

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2021-09-30
    • 1970-01-01
    • 2022-01-13
    • 2021-02-25
    相关资源
    最近更新 更多