如何在启动nginx docker容器时替换文件的内容



当通过docker compose启动docker nginx容器时,我想更改配置文件的内容。我将包含sed命令的脚本复制到";码头入口点.d";目录,以便在启动时执行。注意:nginx1.19引入了一个入口点和一些脚本来更改容器开始时的配置。

但是,我遇到了以下问题:

  1. "sed";总是返回";没有这样的文件或目录";无论我在哪条路径下放置";js";。我已经尝试过不同的道路
  2. 位于";码头入口点.d";被忽略(不执行),如果";ENTRYPOINT["nginx","-g","daemon off"]";设置在Dockerfile中。因此,ENTRYPOINT在发布的Dockerfile中进行了评论

以下是相关文件:

Dockerfile:

# 1.) build
FROM node:14.16.1-alpine3.13 AS builder
WORKDIR /app
COPY . .
# 2.) target image
FROM nginx:1.21.3-alpine
COPY --from=builder /app/myinit.sh ./docker-entrypoint.d
COPY --from=builder /app/env.js /usr/share/nginx/html
#ENTRYPOINT ["nginx", "-g", "daemon off;"]

myinit.sh:

sed -i 's~__env.apiUrlRoot.*~__env.apiUrlRoot = '$MYENV';~g' /usr/share/nginx/html/env.js

env.js:

(function (window) {
window.__env.apiUrlRoot = 'http://localhost:9090';
}(this));

docker-compose.yml:

version: '3.8'
services:
mytest:
image: 'tst:latest'
build: 
context: .
dockerfile: Dockerfile
container_name: tst1
environment:
- MYENV=SomeValue

docker compose命令:

docker-compose -f docker-compose.yml up --build

我发现了第一个问题的根本原因:"myinit.sh";包含windows样式的CRLF,而不是unix样式的LF。我更改了它,shell脚本执行正确。BTW:你可以运行";dos2unix";用LF代替CRLF。

最新更新