我想读取package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
)
func main() {
address := "localhost:9090"
file, err := os.OpenFile("/etc/environment", os.O_RDWR, 0644)
defer file.Close()
if err != nil {
panic(err)
}
input, err := ioutil.ReadAll(file)
if err != nil {
log.Fatalln(err)
}
lines := strings.Split(string(input), "\n")
for i, line := range lines {
if strings.Contains(line, "HTTP_PROXY") {
lines[i] = "HTTP_PROXY=" + address
} else {
if i == (len(lines) - 1) {
lines[i] = "HTTP_PROXY=" + address
}
}
}
output := strings.Join(lines, "\n")
err = ioutil.WriteFile("/etc/environment", []byte(output), 0644)
if err != nil {
log.Fatalln(err)
}
cmd := exec.Command("bash", "-c", "source /etc/environment")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
fmt.Println("cmd=================>", cmd, err)
if err != nil {
fmt.Println(err)
}
}
文件中定义的Dockerfile中的env | grep -i proxy
变量。
有什么办法吗?
这是我的Dockerfile:
PORT
答案 0 :(得分:6)
已更新
在聊天中进行讨论后,人们意识到nodejs应用程序容器没有问题,而该问题来自错误配置的nginx代理。
nodejs应用程序的工作证明是下一个docker-compose文件。
version: "3"
services:
api:
build: .
curl:
image: curlimages/curl:7.70.0
depends_on:
- api
entrypoint: ""
command: curl -si --retry 5 --retry-delay 5 --retry-max-time 40 http://api:6000
restart: on-failure
原始
如果要在构建过程中更改端口(稍后在运行容器时将是静态的),请使用build-args
docker build --build-arg APP_PORT=3000
FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ARG APP_PORT=80
EXPOSE ${APP_PORT}
COPY . .
RUN APP_PORT=${APP_PORT} npm install
CMD APP_PORT=${APP_PORT} npm run start
如果您希望能够在启动容器时更改端口-则build-args不适合,您需要使用env
变量。请注意,构建EXPOSE
之后无法更改。
无论如何,如果EXPOSE
中有不同的端口并且您的应用程序侦听-它不会破坏任何内容,尽管{{1中未指定}}。
您甚至可以跳过文件中的EXPOSE
,因为它更多地是图像的元数据信息,而不是系统打开端口的指令:https://docs.docker.com/engine/reference/builder/#expose
不管EXPOSE设置如何,您都可以在运行时使用-p标志来覆盖它们。
如果构建后图像是静态的(您不打算更改.env),则可以下一步操作,则EXPOSE
和npm install
具有相同的env。而且您仍然可以在以后更改端口,但这不会影响npm安装。
npm run start
如果您必须将FROM node:11-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
RUN export $(cat .env) && npm install
CMD export $(cat .env) && npm run start
保留为数组-那么我们需要创建一个引导脚本
CMD
答案 1 :(得分:2)
您可以在Dockerfile中使用ARG来实现此目的。