Programim dhe zhvillim, javascript, python, php, html

Nuk mund të thirrej një kontejner tjetër duke përdorur emrin e tij si host në docker-compose

Unë kam dy kontejnerë doker. Njëri është serveri java, që funksionon në portin 8080 me API / drejtues të tjerë. Një kontejner tjetër është serveri i thjeshtë nodejs me faqe index.html ku po kryhet thirrja ajax për të ruajtur drejtuesin e ri. URL-ja në skedarin js është: const URL = "http://storage:8080/drivers";

Kur i drejtoj ato duke përdorur vetëm docker dhe krijoj rrjet për ta, komunikimi mes tyre funksionon mirë. Por kur i ekzekutoj të dy kontejnerët duke përdorur docker-compose, atëherë marr statusin "(dështuar) net::ERR_NAME_NOT_RESOLVED"

Kur hap bash të ndonjë prej këtyre kontejnerëve dhe ekzekutoj 'ping storage', normalisht marr pako.

Çfarë më mungon?

DockerFile për serverin java:

FROM java:8

VOLUME /tmp
ADD target/docker-project-1.0-SNAPSHOT.jar app.jar

EXPOSE 8080

RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

DockerFile për serverin nodejs:

FROM node:argon

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN npm install connect serve-static

COPY . /usr/src/app

EXPOSE 8081

CMD ["node", "server.js"]

Skedari docker-compose.yml:

version: '2.1'
services:
  client:
    image: glasierr/js-client
    networks:
       default:
          aliases:
             - "client"
    links:
       - "storage"
    ports:
       - "8081:8081"
  storage:
    image: glasierr/drivers-storage
    networks:
       default:
          aliases:
            - "storage"
    ports:
       - "8080:8080"
    expose:
       - "8080"

Skript JS:

 const URL = "http://storage:8080/drivers";
    $.ajax({
        headers: {
            'Content-Type': 'application/json'
        },
        type: "POST",
        url: URL,
        data: JSON.stringify({
            licenceId: licenceId,
            name: name,
            surname: surname,
            email: email
        }),
        dataType: "json"
    });
19.11.2016

Përgjigjet:


1

Unë nuk mund të shoh ndonjë gabim dhe e provova dhe funksionoi me versionin 2 të kompozimit, ndoshta nuk funksionon me eksperimental.

Por ju mund ta thjeshtoni skedarin tuaj të kompozimit me këtë

version: '2'
services:
  client:
    image: glasierr/js-client
    ports:
       - 8081:8081
  storage:
    image: glasierr/drivers-storage
    ports:
       - 8080:8080

Të gjithë kontejnerët janë automatikisht në rrjetin e paracaktuar të mbivendosjes dhe janë të arritshëm me emrin e shërbimit të tyre (dhe pseudonimi juaj është i njëjtë), kështu që mund të hiqni networks. links bën të njëjtën gjë si rrjeti i paracaktuar dhe depends_on dhe nuk nevojitet në këtë shembull. Ju gjithashtu duhet vetëm expose nëse nuk publikoni 8080.

19.11.2016
  • Provova skedarin tuaj të thjeshtuar të kompozimit dhe rezultati ishte i njëjtë. Provova të pastroj imazhet lokale dhe të tërhiqja nga telekomanda, por asgjë nuk ndryshoi. Unë jam duke përdorur ubuntu 16. Ndoshta mund të ketë probleme? Btw, si e kontrolluat që funksiononte? Unë po shkoj në 172.19.0.2:8081/index.html (ose 172.19.0.3) dhe shtypni 'submit' atje. 20.11.2016
  • Na vjen keq që provova të lidhem vetëm nga brenda kontejnerit të klientit me hapësirën ruajtëse. Dhe nëse specifikohet vetëm porta e kontejnerit, do të zgjidhet një port i rastësishëm. Por tani funksionon edhe nga jashtë kontejnerit 20.11.2016
  • Btw, unë mund të përdor localhost:8081 nga jashtë, por nuk e di se si duket konfigurimi juaj 20.11.2016
  • Për konfigurimin, unë thjesht ekzekutoj docker-compose up me skedarin tuaj të kompozimit. Gjithçka funksionon nëse vendos URL-në në skriptin js në localhost:8080/drivers. Por ai refuzon të punojë në storage:8080/drivers. Nga brenda e kontejnerit të klientit (bash) mund të bëj ping për ruajtjen, por kur ekzekutoj faqen time të internetit nga shfletuesi, ajax POST dështon. 20.11.2016
  • ok, ky është një problem tjetër. Ju nuk mund të përdorni hapësirën ruajtëse nga shfletuesi. Është i disponueshëm vetëm brenda kontejnerit. Nëse provoni docker exec -it desktop_client_1 curl storage:8080/drivers do të kthejë një grup bosh. Mënyra më e mirë do të ishte të proksoni kërkesën në mënyrë që të mos keni nevojë të përdorni hapësirën ruajtëse nga jashtë 20.11.2016
  • Hm, më duket e çuditshme. Unë nuk thashë që po telefonoj storage:8080 direkt në shfletues. E di që 'magazinimi' është i disponueshëm vetëm brenda dokerit. Thashë që po hap klientin në shfletues dhe ai klient po thërret hapësirën ruajtëse. Mendova se nëse klienti është brenda dokerit, atëherë do të jetë në gjendje të thërrasë hapësirën ruajtëse. Siç thashë në pyetje, u përpoqa t'i ekzekutoja ato në rrjetin e krijuar pa kompozim docker, dhe gjithçka funksionoi mirë. Unë shoh që kompozimi po krijon rrjet për ta, kështu që ata duhet të jenë në gjendje të thërrasin njëri-tjetrin me emrat e shërbimeve të tyre (host) 20.11.2016
  • Do të thotë js që po funksionon në shfletues ose nodejs. nodejs po funksionon në kontejner dhe js në shfletues nuk funksionon brenda kontejnerit. Kjo kërkesë ajax dërgohet nga shfletuesi, kështu që nuk mund të përdorë hapësirën ruajtëse. Por ky ajax në ruajtje gjithashtu nuk do të funksiononte pa kompozim 20.11.2016
  • Keni të drejtë. Tani e kuptoj ku gabova. Faleminderit per ndihmen 21.11.2016
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..