Я хотел бы связать три службы вместе (db, nginx и веб-сервис) под сетью мостов и быть в состоянии совать с разных сервисов с моего локального хоста или изнутри контейнера и интерактивный терминал для веб-службы. Как я могу это достичь?Terminal with Docker Compose with Links
Моя конфигурация докер-Compose заключается в следующем:
version: '2'
services:
web:
build:
context: .
dockerfile: Dockerfile-alpine
command: /bin/bash
ports:
- "5000:5000"
volumes:
- $REPO_DIR:/repository
links:
- db
- nginx
nginx:
image: nginx:stable-alpine
ports:
- "8080:8080"
volumes:
- $NGINX_STATIC_DIR:/var/www/static
- $NGINX_CONFIG_FILE:/etc/nginx/nginx.conf
db:
image: mysql/mysql-server
ports:
- "3307:3306"
environment:
MYSQL_USER: $MYSQL_USER
MYSQL_PASSWORD: $MYSQL_PASSWORD
MYSQL_DATABASE: $MYSQL_DATABASE
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
volumes:
- $DB_DATA_DIR:/var/lib/mysql
- $DB_LOG_DIR:/var/log/mysql
, где веб-служба использует mhart/alpine-node:6.7.0
в качестве основы и далее добавляет некоторые утилиты плюс Python3.5 и фляжки.
Если у меня есть docker-compose run web
, я получаю доступ к интерактивному терминалу, но службы db и nginx не загружаются/связаны должным образом. Я получаю следующий вывод:
Starting courseadmin_nginx_1
Starting courseadmin_db_1
bash-4.3#
, а затем дополнительно сети судебно-медицинской экспертизы из внутри контейнера поворачивает вверх, что ни Nginx или дб присутствуют. Я также могу поддержать эту заявку, так как с помощью docker-compose up
фактически был создан конфликт порта для службы db, предоставленный, что у меня есть mysql, установленный на моей хост-системе, вещь, о которой он никогда не сообщал с docker-compose run
.
С другой стороны, если я пытаюсь docker-compose up
, я получаю гораздо более активный след, но не интерактивный терминал:
Starting courseadmin_nginx_1
Recreating courseadmin_db_1
Recreating courseadmin_web_1
Attaching to courseadmin_nginx_1, courseadmin_db_1, courseadmin_web_1
db_1 | Initializing database
courseadmin_web_1 exited with code 0
db_1 | Database initialized
db_1 | MySQL init process in progress...
db_1 | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
db_1 | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
db_1 | mysql: [Warning] Using a password on the command line interface can be insecure.
db_1 | mysql: [Warning] Using a password on the command line interface can be insecure.
db_1 | mysql: [Warning] Using a password on the command line interface can be insecure.
db_1 | mysql: [Warning] Using a password on the command line interface can be insecure.
db_1 |
db_1 | /entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
db_1 |
db_1 |
db_1 | MySQL init process done. Ready for start up.
db_1 |
Что не может сделать, чтобы достичь интерактивного терминала и надлежащей увязки моих трех контейнеров ?
The 'докеров-compose' документы я продолжаю говорить о том, можно найти здесь, а именно часть о' links': https://docs.docker.com/compose/networking/#/links – d00bsm3n
Отличный пост! Это определенно помогает мне продвигаться вперед. Однако я не могу выполнить docker exec -ti $ container_id, потому что мой веб-контейнер продолжает умирать, поскольку/bin/bash не имеет ничего общего. Есть ли способ сохранить его живым, не пропуская ни одной точки входа? –
На всякий случай вы не знаете, почему ** ваш контейнер 'web' умирает, см. [Здесь] (http://stackoverflow.com/a/28214133/6942595). В остальном, можете ли вы подробнее описать в своем OP то, что вы пытаетесь достичь, с помощью своей «веб-службы»? Для меня кажется, что вы можете просто сделать «image: alpine», и он настроит контейнер, в который вы можете запустить оболочку с помощью 'exec'? – d00bsm3n