为什么我编辑 /usr/local/bin/docker-entrypoint.sh 文件时没有任何反应?
How come when I edit the /usr/local/bin/docker-entrypoint.sh file nothing happens?
我从节点 docker 图像创建了一个容器。然后我使用 bash 进入容器并尝试编辑入口点文件,但我在其中所做的更改不会执行。就像我告诉它在容器的根路径中创建一个名为 /app
的目录一样,我停止并启动容器,但没有发生更改。这是文件
#!/bin/sh
set -e
mkdir /app
# Run command with node if the first argument contains a "-" or is not a system command. The last
# part inside the "{}" is a workaround for the following bug in ash/dash:
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=874264
if [ "${1#-}" != "" ] || [ -z "$(command -v "")" ] || { [ -f "" ] && ! [ -x "" ]; }; then
set -- node "$@"
fi
exec "$@"
当您进行此更改时,入口点脚本已经执行。一个容器运行s 一个进程,它是入口点脚本;如果不重新 运行 容器,就无法重新 运行 它。如果您 docker rm
旧容器和 docker run
新容器,您对文件所做的更改将会丢失。
作为一般流程,我建议避免“进入容器”。如果您需要在这样的脚本中进行更改,请在主机上进行更改,docker build && docker run
更改后的新图像,然后将更改后的文件提交到源代码管理。如果您更改应用程序代码,npm test
它在主机上,然后 docker build && docker run
一个新图像,并将更新的代码和单元测试提交到源代码管理。
对于您的特定用例,如果容器应始终包含一个名为 /app
的目录,我建议您在图像的 Docker 文件中创建它,而不是尝试在容器启动。
FROM node:lts
RUN mkdir /app
...
更一般地说,您的图像应包含 运行 您的应用程序所需的文件系统布局和代码。对于大多数 Node 应用程序,我希望 Docker 文件看起来像
FROM node:lts
WORKDIR /app
COPY package*.json .
RUN npm ci
COPY . .
CMD node ./index.js
(您还有一个 .dockerignore
file 排除了主机的 node_modules
树。)
Docker 的 Sample application 教程更详细地描述了这个序列,包括一个不同的基于节点的示例。
我从节点 docker 图像创建了一个容器。然后我使用 bash 进入容器并尝试编辑入口点文件,但我在其中所做的更改不会执行。就像我告诉它在容器的根路径中创建一个名为 /app
的目录一样,我停止并启动容器,但没有发生更改。这是文件
#!/bin/sh
set -e
mkdir /app
# Run command with node if the first argument contains a "-" or is not a system command. The last
# part inside the "{}" is a workaround for the following bug in ash/dash:
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=874264
if [ "${1#-}" != "" ] || [ -z "$(command -v "")" ] || { [ -f "" ] && ! [ -x "" ]; }; then
set -- node "$@"
fi
exec "$@"
当您进行此更改时,入口点脚本已经执行。一个容器运行s 一个进程,它是入口点脚本;如果不重新 运行 容器,就无法重新 运行 它。如果您 docker rm
旧容器和 docker run
新容器,您对文件所做的更改将会丢失。
作为一般流程,我建议避免“进入容器”。如果您需要在这样的脚本中进行更改,请在主机上进行更改,docker build && docker run
更改后的新图像,然后将更改后的文件提交到源代码管理。如果您更改应用程序代码,npm test
它在主机上,然后 docker build && docker run
一个新图像,并将更新的代码和单元测试提交到源代码管理。
对于您的特定用例,如果容器应始终包含一个名为 /app
的目录,我建议您在图像的 Docker 文件中创建它,而不是尝试在容器启动。
FROM node:lts
RUN mkdir /app
...
更一般地说,您的图像应包含 运行 您的应用程序所需的文件系统布局和代码。对于大多数 Node 应用程序,我希望 Docker 文件看起来像
FROM node:lts
WORKDIR /app
COPY package*.json .
RUN npm ci
COPY . .
CMD node ./index.js
(您还有一个 .dockerignore
file 排除了主机的 node_modules
树。)
Docker 的 Sample application 教程更详细地描述了这个序列,包括一个不同的基于节点的示例。