Не поднимается контейнер docker
прописываю docker run -d -p 80:80 test4 и появляется ошибка:

Содержимое Dockerfile
FROM ubuntu:latest AS builder
LABEL version ="1.0"
RUN apt-get update && \
apt-get install -y systemd && \
apt-get install -y libpcre3 && \
apt-get install -y libpcre3-dev && \
apt-get install -y zlib1g && \
apt-get install -y zlib1g-dev && \
apt-get install -y libssl-dev
WORKDIR /builddir/
COPY ./nginx-1.23.1 /builddir/
ADD scriptbuild /builddir/nginx-1.23.1
FROM alpine:latest
WORKDIR /dirbuild/
COPY --from=builder /builddir/nginx-1.23.1/ /dirbuild/
EXPOSE 80
CMD ["./scriptbuild"]
CMD ["nginx","-g","daemon off"]
Содержимое scriptbuild
#!/bin/bash
./configure --sbin-path=/builddir/nginx-1.23.1 --conf-path=/builddir/nginx-1.23.1/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/ndinx.pid --with-http_ssl_module
make
make install
В чём может быть проблема и как её можно решить?
Ответы (1 шт):
Автор решения: Exploding Kitten
→ Ссылка
Вместо CMD ["./scriptbuild"] нужно использовать RUN, тогда у вас nginx будет собран при сборке образа.
В Dockerfile может быть только одна CMD команда (да их можно написать две, но выполняться будет только последняя), которая будет выполняться при запуске контейнера.
Например Dockerfile:
FROM ubuntu:latest AS builder
RUN apt-get update && \
apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev wget
RUN wget http://nginx.org/download/nginx-1.23.1.tar.gz && \
tar -zxvf nginx-1.23.1.tar.gz
WORKDIR /nginx-1.23.1
RUN mkdir -p /builddir
RUN ./configure --sbin-path=/builddir --conf-path=/builddir/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-pcre --pid-path=/var/run/ndinx.pid --with-http_ssl_module && \
make && \
make install
FROM ubuntu:latest
RUN mkdir -p /var/log/nginx && \
mkdir -p /usr/local/nginx
WORKDIR /builddir
COPY --from=builder /builddir/ /builddir/
EXPOSE 80
CMD ["/builddir/nginx","-g","daemon off;"]
- вы пытаетесь использовать multi-stage build, но не правильно, такой подход подразумевает, что у вас один stage это сборка
nginx+ все его зависимости, в второй - это уже непосредственно готовый образу для запауска. - если вы хотиде запускать на
alpine, то лучше и собирать на нем, т.к. уubuntuиalpineразные версииlibc(стандартрная библиотека) и когда собирается программа из исходником, она часто линкуется с конкретной версией, которая стоит в системе. RUN mkdir -p /var/log/nginx && mkdir -p /usr/local/nginxне обязательно, но тогда нужно поменять параметры в./configure.- сейчас исходный код
nginxскачивается при сборке, он не должен лежать рядом сDockerfile.