我有一个 docker compose 文件,可以在我的 Windows/WSL 环境中正常工作。我正在尝试将其部署到 Ubuntu 服务器。我收到以下错误
unable to prepare context: path "/home/dev/gestion_energetique/portainer/node_red/docker-alpine.sh
。
该镜像是使用 docker-alpine.sh 脚本构建的。该文件在那里并且具有所有权限(777)。我见过类似的问题,但没有人帮助我解决这个问题。我假设问题是 .sh 脚本,但我不知道如何解决这个问题。
如有任何帮助,我们将不胜感激。
这是我使用的文件
撰写文件:
services:
nodered:
container_name: nodered
image: testing:node-red-build
build: /home/dev/gestion_energetique/portainer/node_red/docker-alpine.sh
restart: always
ports:
- 1880:1880
# volumes:
# - ~/node_red/:/data/
influxdb:
container_name: influxdb
image: influxdb:latest
restart: always
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=${INFLUXDB_USERNAME}
- DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_PASSWORD}
- DOCKER_INFLUXDB_INIT_ORG=${INFLUXDB_ORG}
- DOCKER_INFLUXDB_INIT_BUCKET=${INFLUXDB_BUCKET}
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_TOKEN}
volumes:
- /home/dev/gestion_energetique/portainer/data:/var/lib/influxdb2
- /home/dev/gestion_energetique/portainer/config/influxdb:/etc/influxdb2
ports:
- 8086:8086
depends_on:
- nodered
grafana:
container_name: grafana
image: grafana/grafana:latest
restart: always
ports:
- 3000:3000
volumes:
- /home/dev/gestion_energetique/portainer/data/grafana:/var/lib/grafana
- /home/dev/gestion_energetique/portainer/config/grafana:/etc/grafana
depends_on:
- influxdb
ihm:
container_name: ihm
build: /home/dev/gestion_energetique/portainer/.
restart: always
ports:
- 1312:1312
depends_on:
- influxdb
docker-alpine.sh
#!/bin/bash
export NODE_RED_VERSION=$(grep -oE "\"node-red\": \"(\w*.\w*.\w*.\w*.\w*.)" package.json | cut -d\" -f4)
echo "#########################################################################"
echo "node-red version: ${NODE_RED_VERSION}"
echo "#########################################################################"
docker build --rm --no-cache \
--build-arg ARCH=amd64 \
--build-arg NODE_VERSION=20 \
--build-arg NODE_RED_VERSION=${NODE_RED_VERSION} \
--build-arg OS=alpine \
--build-arg BUILD_DATE="$(date +"%Y-%m-%dT%H:%M:%SZ")" \
--build-arg TAG_SUFFIX=default \
--file Dockerfile.custom \
--tag testing:node-red-build .
谢谢你!
根据 Compose 规范,如果
build:
是一个字符串,那么它要么是包含构建上下文的 directory,要么是指向 directory的
git://...
URL。 同一文档指出,Compose“执行 Docker 构建,在目录的根目录中查找规范的 Dockerfile
”。
Compose 不会运行任意 shell 脚本,实际上您应该会收到类似“构建上下文不是目录”的错误。
看起来该脚本中的内容主要是试图提供构建时参数。 那些是静态的或只是通过主机环境变量,您可以将其包含在 Compose 文件中
services:
nodered:
build:
context: .
dockerfile: Dockerfile.custom # consider just "Dockerfile"
args:
ARCH: amd64 # consider automatic `$TARGETARCH`
NODE_VERSION: "20"
NODE_RED_VERSION: # intentionally empty to pass through from host
OS: alpine
image: testing:node-red-build # optional if you're not pushing this image anywhere
唯一剩下的变量是构建日期。 您没有说明它在 Dockerfile 中的使用方式,但您应该能够在 Dockerfile 内实际使用该值的
date
指令中运行相同的 RUN
命令。