我有两个泊坞容器。一个是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"
});
答案 0 :(得分:0)
我看不出错误并尝试了它,它与compose版本2一起使用,也许它不适用于实验。
但是您可以简单地将您的撰写文件添加到
version: '2'
services:
client:
image: glasierr/js-client
ports:
- 8081:8081
storage:
image: glasierr/drivers-storage
ports:
- 8080:8080
所有容器都自动位于默认覆盖网络中,并且可以通过servicename访问(并且您的别名相同),因此您可以删除networks
。 links
与默认网络和depends_on
的作用相同,在此示例中不需要。如果您不发布8080,则还需要expose
。