【发布时间】:2020-08-25 17:00:14
【问题描述】:
script运行容器时需要初始化环境变量。
所以编写一个 shell 脚本在运行容器时通过将其分配给入口点来对其进行初始化。
入口点.sh
#!/bin/bash
# Load the script of environment variables
. /home/foo/setupvars.sh
echo "INITIALIZZEE"
printenv
exec "$@"
Dockerfile
FROM ubuntu:18.04
WORKDIR /home/foo
COPY entrypoint.sh /home/foo/entrypoint.sh
RUN ["chmod", "+x", "/home/foo/entrypoint.sh"]
COPY setupvars.sh /home/foo/setupvars.sh
RUN ["chmod", "+x", "/home/foo/setupvars.sh"]
ENTRYPOINT ["/home/foo/entrypoint.sh"]
我构建图像,
docker build -t foo .
并运行一个容器,如:
docker run --rm -it foo bash
运行容器时,环境变量脚本运行,echo 运行,printenv 运行。但我无法获得任何交互式 bash。 exec "$@" 命令无法获取我的 bash 命令。当我手动在那里写 bash 就像 exec "bash" 时,它可以工作。另一方面,它不能。
我的步骤和best practices of docker一样。
我的错误是什么?
【问题讨论】:
-
将
entrypoint.sh脚本更改为使用#!/bin/bash?您不应该尝试在非 bash 脚本中获取 bash 脚本。此外,您可以在本地文件夹中的入口点脚本上设置执行位,并放弃RUN指令。 -
@wmorrell 是的,我改变了,正如我所说的那样。我将
#!/bin/sh替换为#!/bin/bash。 -
那么你应该用你正在运行的实际代码来更新问题,而不是你在进行更改之前尝试运行的代码。您是否在尝试再次运行之前重建图像?仅更改 Dockerfile 不足以更新映像。
-
@wmrorrell 我编辑。我为每次更改构建并运行。
-
我不认为这是您正在运行的代码,因为当我运行它时,我会在容器内收到一个 bash 提示。发布您的实际代码。
标签: docker shell dockerfile