在docker-compose中无法使用其名称作为主机调用另一个容器

时间:2016-11-19 13:34:40

标签: docker docker-compose

我有两个泊坞容器。一个是java服务器,运行在带有其他API /驱动程序的8080端口上。另一个容器是带有index.html页面的简单nodejs服务器,其中正在执行ajax调用以保存新驱动程序。 js文件中的URL为:const URL =“http://storage:8080/drivers”;

当我使用docker运行它们并为它们创建网络时,它们之间的通信工作正常。但是当我使用docker-compose运行两个容器时,我得到状态“(failed)net :: ERR_NAME_NOT_RESOLVED”

当我打开任何这个容器的bash并运行'ping storage'时,我通常会收到数据包。

我错过了什么?

用于java服务器的DockerFile:

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"]

nodejs服务器的DockerFile:

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"]

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"

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"
    });

1 个答案:

答案 0 :(得分:0)

我看不出错误并尝试了它,它与compose版本2一起使用,也许它不适用于实验。

但是您可以简单地将您的撰写文件添加到

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

所有容器都自动位于默认覆盖网络中,并且可以通过servicename访问(并且您的别名相同),因此您可以删除networkslinks与默认网络和depends_on的作用相同,在此示例中不需要。如果您不发布8080,则还需要expose