我想联系两个码头集装箱。我是Docker的新手,我尝试过很多不同的方式。
首先,我制作了两个不同的Dockerfile
myJavaAPI Dockerfile文件:
FROM java:8
WORKDIR /app
COPY . .
EXPOSE 4016:23503
CMD java -jar myJavaServerApi.jarjava API监听localhost:4016并提供来自127.0.0.1:23503的数据
其他Dockerfile:
FROM python:3.8
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 23503:23503
CMD ["python","./myDaemonServer.py"]myDaemonServer从23503获取连接并做一些工作。
我试着在我的机器上运行这两个文件,一切都运行得很好。但是当我创建Docker时,这两个容器无法通信,myDaemonServer看不到我的Java API。
我使用以下命令构建了我的镜像:
docker build -t dockerjava .
docker build -t dockerdaemon .并通过以下方式运行:
docker run -d <ImageID>首先我运行dockerjava,然后我运行dockerdaemon
此外,我尝试了此命令,但没有任何变化:
docker run -p --net=host <DockerImageIDs>我如何解决这个问题?
编辑:守护进程(python文件)监听127.0.0.1:23503并从5002端口为其提供服务。
发布于 2021-09-29 07:50:59
两个Docker容器可以通过TCP进行通信。
为了便于配置,您可以使用单个docker-compose.yml:
version: '3.6'
services:
myJavaServer:
container_name: myJavaServer
restart: always
image: ...
ports:
- 80:80
- 443:443
myDaemonServer:
container_name: myDaemonServer
restart: always
image: ...
networks:
default:
driver: bridge
name: mynetwork如果要使用单独的docker-compose.yml文件,则必须使用外部网络:
version: '3.6'
services:
myJavaServer:
container_name: myJavaServer
restart: always
image: ...
ports:
- 80:80
- 443:443
networks:
- mynetwork
networks:
mynetwork:
external: true对于守护进程:
version: '3.6'
services:
myDaemonServer:
container_name: myDaemonServer
restart: always
image: ...
networks:
- mynetwork
networks:
mynetwork:
external: true如果使用两个docker-compose.yml文件,则可以使用命令docker network create ...:https://docs.docker.com/engine/reference/commandline/network_create/创建外部网络
在您的容器中,您现在可以简单地使用名称:ping myJavaServer进行通信。或者http://myJavaServer:1234,不需要映射用于同一网络内的通信的端口(端口1234)。端口映射只有在将您的服务器暴露给外部世界(例如端口80/443)时才是必需的。
要启动这两个容器,可以在docker-compose.yml文件的目录中运行命令docker-compose up。
发布于 2021-09-29 08:04:35
你可以用两种方法来解决这个问题,
networks,为您的应用程序提供以下示例docker-compose文件。version: "3.3"
services:
# Java API
myJavaAPI:
image: "dockerjava"
ports:
- "4016:23503"
restart: "no"
networks:
- localnetwork
# Python Daemon
myDaemonServer:
image: "dockerdaemon"
ports:
- "23503:23503"
restart: "no"
depends_on:
- myJavaAPI
networks:
- localnetwork
networks:
localnetwork:http://host.docker.internal:23503代替localhost:23503。但我建议您使用第一种方法,因为这是使容器相互连接的更简洁的方法。
https://stackoverflow.com/questions/69372179
复制相似问题