Сеть в docker compose

lutskboy
На сайте с 22.11.2013
Offline
180
233

Привет

у меня есть docker-compose.yml

# Файл docker-compose должен начинаться с указания версии.
version: '3'

# Сети
networks:
    internal:

# Ниже список наших сервисов (контейнеров). NGINX, PHP, MySQL, phpMyAdmin
services:
    nginx:
        # Какую версию образа nginx из официального хранилища DockerHub используем
        image: nginx:stable-alpine
        container_name: nginx
        restart: always
        # Ниже прокидываем порты. NGINX в контейнере работает на дефолтном 80, а мы возьмем 8000
        ports:
          - "80:80"
        # Монтируем директории, слева директории на основной системе, справа - куда они монтируются в контейнере
        volumes:
          - ./sites:/var/www
          - ./config/nginx:/etc/nginx/conf.d
          - ./data/logs:/var/log/nginx/
        # Зависимости  
        depends_on:
          - php
          - mysql
        networks:
          - internal
    php:
        build:
          context: ./config/php
          dockerfile: Dockerfile
        container_name: php
        restart: always
        volumes:
          - ./sites:/var/www
          - ./config/php/php.ini:/usr/local/etc/php/php.ini
        ports:
          - "9000:9000"
        networks:
          - internal
    go:
      build: ./go
      container_name: go
      restart: always
      ports:
        - "8080:8080"
      networks:
        - internal
    mysql:
        image: mysql:8.0
        container_name: mysql
        restart: always
        command: --default-authentication-plugin=mysql_native_password
        #command: --innodb_use_native_aio=0
        ports:
          - "3306:3306"
        volumes:
          - ./data/mysql:/var/lib/mysql
        # Задаем пароль для root пользователя
        environment:
          MYSQL_ROOT_PASSWORD: Az43Eo87UvL
        networks:
         - internal

в ./go есть Dockerfile

FROM golang:1.12-alpine
EXPOSE 8080

но из php go не вызывается

$res = shell_exec('go version');
var_dump($res); // null

хот по идее же должно показать версию. я правильно понимаю что тут 

networks:
        - internal

ето как бы одна сеть между етими контейнерами? что у меня не хватает тут?
 

Aisamiery
На сайте с 12.04.2015
Online
302
#1
Вы что то странное делаете. Сеть она и в Африке сеть. Нельзя локально вызвать go не в контейнере go, по сети можно вызывать только сетевые сервисы
Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
lutskboy
На сайте с 22.11.2013
Offline
180
#2
Aisamiery #:
Нельзя локально вызвать go не в контейнере go

я не локально на хосте вызываю. а с контейнера php

Aisamiery
На сайте с 12.04.2015
Online
302
#3
lutskboy #:

я не локально на хосте вызываю. а с контейнера php

Давайте я чуть проще объясню, каждый контейнер в докере условно виртуальная машина и вы их объединили в локальную сеть. Нельзя вызывать программы одной виртуальной машины из другой по сети, если они не сетевые (не слушают сетевые запросы). Вы же пытаетесь вызвать компилятор го в контейнере пхп который про него ничего не знает, а знает только про какую то виртуальную машину под названием го

lutskboy
На сайте с 22.11.2013
Offline
180
#4
Aisamiery #:
если они не сетевые

зачем тогда там в настройках го указываются ports? выходит они там и не нужны?

Aisamiery
На сайте с 12.04.2015
Online
302
#5
lutskboy #:

зачем тогда там в настройках го указываются ports? выходит они там и не нужны?

Да у вас с виду весь файл кривой. nginx почему то зависит от mysql, что он с ним делает непонятно, но думаю что ничего, а просто добавлено чтобы было, порты php зачем то проброшены в хостовую систему, хотя туда я уверен ходит только nginx контейнер, сервис го вообще ничего не делает, он при старте скорее всего сразу в Exit(1) уходит, так как нет процесса с pid1, так как ничего не запущено. mysql тоже наружу зачем то порты выкинуты, но ок считаем что это для локальной разработки и есть какое то подключение их phpstorm, но прокидывать volume так для БД очень глупо, да и не нужно, таким образом деградирует дисковые операции для контейнера. Короче ваш файл составлен по сути дилетантом который не понимает что за что отвечает

Aisamiery
На сайте с 12.04.2015
Online
302
#6

ну и go используют в докере немного по другому, сам go очень много весит и он нужен только для сборки бинарника, бинарник после этого весит менее 10Мб и его как раз и запускают, для пример вот один из моих проектов на го и двустадийная сборка

И как раз ENTRYPOINT это бинарник на го который и запускается внутри контейнера

lutskboy
На сайте с 22.11.2013
Offline
180
#7
спасибо за обьяснение

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий