Я создаю свое приложение для локальной разработки, используя docker-compose.yaml
, используя два Dockerfiles
- одно для приложения (WordPress), а другое для nginx. Поскольку это специальное приложение, построенное с использованием конвейера Jenkins, я не могу изменить файлы Docker, но я хотел бы иметь возможность использовать ту же среду для локального тестирования, что и на промежуточных и рабочих серверах.
Часть php работает, но nginx не работает. Dockerfile
для nginx выглядит так:
FROM nginx:latest
COPY scripts/docker-nginx-entrypoint.sh /docker-nginx-entrypoint.sh
COPY ./config/nginx.conf /opt/nginx.conf
COPY ./config/nginx.conf.prd /opt/nginx.conf.prd
COPY --from=DOCKER_IMAGE_NAME_PHP /var/www/html/ /var/www/html/
CMD ["/bin/bash","/docker-nginx-entrypoint.sh"]
Сбой DOCKER_IMAGE_NAME_PHP
с
ОШИБКА: не удалось создать службу 'nginx': недопустимо из значения флага DOCKER_IMAGE_NAME_PHP: недопустимый формат ссылки: имя репозитория должно быть в нижнем регистре
В моем docker-compose.yaml
для части nginx у меня есть
nginx:
build:
context: .
dockerfile: Dockerfile.static
container_name: web-service
working_dir: /var/www
volumes:
- .:/var/www
environment:
- "DOCKER_IMAGE_NAME_PHP=app-admin"
- "DOCKER_IMAGE_NAME_NGINX=web-service"
depends_on:
- app
ports:
- 8090:80
Я думал, что установки environment
в файле compose будет достаточно, и что это будет использовано (app-admin
- это container_name
части php с WordPress).
В моих конвейерных сценариях Jenkins эти имена используются для создания приложения и статических изображений вручную (с использованием docker build -t DOCKER_IMAGE_NAME_PHP -f Dockerfile.php
), а затем имена устанавливаются на env
, как
echo -e "DOCKER_IMAGE_NAME_PHP=$DOCKER_IMAGE_NAME_PHP" >>env
EDIT
Как и предложенный ответ, я пытался добавить args
под build
key
build:
context: .
dockerfile: Dockerfile.static
args:
- "DOCKER_IMAGE_NAME_PHP=app-admin"
Тогда в моем Dockerfile
я добавил
FROM nginx:latest
COPY scripts/docker-nginx-entrypoint.sh /docker-nginx-entrypoint.sh
COPY ./config/nginx.conf /opt/nginx.conf
COPY ./config/nginx.conf.prd /opt/nginx.conf.prd
ARG DOCKER_IMAGE_NAME_PHP
COPY --from=$DOCKER_IMAGE_NAME_PHP /var/www/html/ /var/www/html/
CMD ["/bin/bash","/docker-nginx-entrypoint.sh"]
Но я все еще получаю ошибку. Я пробовал с ${DOCKER_IMAGE_NAME_PHP}
, но это не помогает.
Странно то, что при добавлении RUN echo $DOCKER_IMAGE_NAME_PHP
, когда я запускаю это, я вижу
Step 6/8 : RUN echo $DOCKER_IMAGE_NAME_PHP
---> Running in 0801fcd5b77f
app-admin
Но это не распознается в команде COPY
. Как получилось?
РЕДАКТИРОВАТЬ 2
Оказывается, я не могу сделать это:
https://github.com/moby/moby/issues/34482
Поскольку --from
ожидает имя образа (которое я пытаюсь передать ему из ранее созданной службы, но в моем случае оно динамическое). Это работает в Jenkins, так как я делаю команду docker build
, а переменные доступны в скрипте bash ...