Сеть отличается от указанной после docker -создать? - PullRequest
0 голосов
/ 23 февраля 2020

Что ж, я пытаюсь создать сеть из нескольких докеров в одном файле компоновки, однако сети, которая должна быть создана, там нет, даже когда docker-compose up работает нормально:

docker compose:

networks:
  allsports.test:
    driver: bridge
services:
  allsports.test.nginx:
    build:
      context: ./allsports.test.nginx/
    container_name: allsports.test.nginx
    image: allsports.test.nginx
    networks:
    - allsports.test
    ports:
    - 380:80
    restart: on-failure
  allsports.test.redis:
    build:
      context: ./allsports.test.redis/
    container_name: allsports.test.redis
    image: allsports.test.redis
    networks:
    - allsports.test
    restart: on-failure
version: '3.7'

После запуска docker-compose up -d:

Starting allsports.test.nginx ... done
Starting allsports.test.redis ... done

Однако сейчас я пытаюсь проверить сеть: sudo docker inspect allsports.app говорит, что сеть не существует. Если я делаю sudo docker network ls, я также не вижу сеть.

Если я проверяю один из созданных докеров:

sudo docker inspect allsports.test.nginx -f "{{.NetworkSettings.Networks}}"

> map[allsportstest_allsports.test:0xc000604000]

Что вызывает это переименование и (как) я могу логически найти действительные сети, созданные путем проверки составного файла?

1 Ответ

0 голосов
/ 23 февраля 2020

По умолчанию docker имена, созданные docker-compose, используют имя проекта compose в качестве префикса, чтобы избежать конфликтов имен.

Имя проекта по умолчанию является именем папки, содержащей ваш docker-compose.yml. Вы можете настроить его с помощью переменной среды COMPOSE_PROJECT_NAME (в вашей оболочке или в файле .env) или с помощью параметра командной строки -p

Способ вычисления имен по умолчанию docker зависит от типа объекта. Например, имена контейнеров по умолчанию создаются из шаблона <projectName>_<serviceIdentifier>_<containerIncrement>. Но вы обычно можете использовать свое собственное имя, когда это необходимо (как вы делали это в своем файле компоновки, называя ваши уникальные сервисные контейнеры).

Для сетей имя по умолчанию - <projectName>_<networkIdentifier>, как сообщалось в вашей последней проверке. Команда в вашем вопросе. Таким образом, вы можете определенно вывести это имя из имени проекта и сетевого идентификатора в вашем файле.

Между тем, как и в случае с вашими контейнерами, вы можете использовать network name параметр для настройки у вас есть собственное имя, которое будет использоваться как есть. В этом случае вы должны самостоятельно позаботиться о возможных конфликтах имен.

networks:
  allsports.test:
    driver: bridge
    name: allports.test
...