2016-09-03 7 views
2

Я композитор файл Docker, похожий на:Docker ссылка Контейнер сборки аргумента

 
version: '2' 
services: 
    db: 
     image: mariadb:10.1 
     volumes: 
      - "./.data/db:/var/lib/mysql" 
     restart: always 
     environment: 
      MYSQL_ROOT_PASSWORD: test 
      MYSQL_DATABASE: test 
      MYSQL_USER: test 
      MYSQL_PASSWORD: test 
    test: 
     depends_on: 
      - db 
     links: 
      - db:db 
     build: 
      context: . 
      args: 
       MYSQL_HOST: db 
       MYSQL_DATABASE: test 
       MYSQL_USER: test 
       MYSQL_PASSWORD: test 
     ports: 
      - "8000:80" 
     restart: always 

Внутри тест-контейнера Dockerfile

 
FROM ... 

... 
ARG MYSQL_HOST 127.0.0.1 

RUN set -x; echo $MYSQL_HOST 

RUN script ... --param $MYSQL_HOST 

Однако MYSQL_HOST переменная (которую я бы ожидать, чтобы быть внутренний IP другого контейнера) не переводится в другое имя контейнера.

Как это можно сделать? Может ли это быть достигнуто по-другому с составлением докеров?

+0

Какое значение содержит MYSQL_HOST? – ppeterka

+0

MYSQL_HOST должен ссылаться на имя хоста/IP другого контейнера ... –

+0

Хорошо, но что он содержит ** сейчас **, с вашим текущим файлом-композитором? – ppeterka

ответ

1

Я не думаю, что вы хотите построить аргумент здесь. Вероятно, MYSQL_HOST установит в качестве переменной среды. Внутри docker-compose буквальная строка db фактически разрешима для вашего контейнера db.

Как правило, составляют файлы выглядеть следующим образом:

test: 
    links: 
    db:db 
    environment: 
    - MYSQL_HOST=db 

Затем в тестовом коде сделать что-то вроде:

... 
String dbHost = System.getEnv("MYSQL_HOST"); 
... 

Таким образом, хозяин MySql не должен быть встроен в ваш изображение, устраняющее необходимость постоянного восстановления вашего изображения.

+0

Спасибо за предложение. К сожалению, этот код находится в уже существующем приложении и фактически используется в процессе построения для создания файла конфигурации, который будет считываться запущенным приложением (это: https://www.mediawiki.org/wiki/Manual:Install.php). Кажется, это должно быть с build args, потому что envs игнорируются в процессе сборки. –

+0

Похоже, что ваша сборка зависит от внешнего сетевого доступа к другому контейнеру. По дизайну изображения должны быть построены на любых докере-хостах без внешних зависимостей, а докер не поддерживает метод, необходимый для сбора зависимостей. В лучшем случае у вас может быть шаг предварительной сборки, который собирает настройки из внешних источников и вводит их непосредственно в сборку изображений в виде args. – BMitch

+0

Спасибо. Ты прав. Я на самом деле могу сделать это с помощью команды сценария Bash, например: «docker inspect --format» {{.NetworkSettings.IPAddress}} 'db' Я буду комментировать проблемы, связанные с докере, если это может быть в будущем. , –

Смежные вопросы