我想连接客户端映像和服务器映像。所以我试着用-链接,坞-合成,但我失败了。但是,当我试图连接本地客户端代码和服务器容器时,它成功了。我想这可能是Dockerfile的问题,但我无法解决。这是我的代码:
-服务器
import socket
HOST = socket.gethostbyname('localhost')
PORT = 65456
print('> echo-server is activated')
#print(HOST,PORT)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as serverSocket:
serverSocket.bind(('', PORT))
serverSocket.listen()
clientSocket, clientAddress = serverSocket.accept()
with clientSocket:
print('> client connected by IP address {0} with Port number {1}'.format(clientAddress[0], clientAddress[1]))
while True:
# [=start=]
RecvData = clientSocket.recv(1024)
print('> echoed:', RecvData.decode('utf-8'))
clientSocket.sendall(RecvData)
if RecvData.decode('utf-8') == 'quit':
break
# [==end==]
print('> echo-server is de-activated')--客户
import socket
HOST = socket.gethostbyname('localhost')
PORT = 65456
print('> echo-client is activated')
#print(HOST,PORT)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as clientSocket:
#print(HOST,PORT)
clientSocket.connect((HOST, PORT))
while True:
sendMsg = input("> ")
clientSocket.sendall(bytes(sendMsg, 'utf-8'))
recvData = clientSocket.recv(1024)
print('> received:', recvData.decode('utf-8'))
if sendMsg == "quit":
break
print('> echo-client is de-activated')--服务器Dockerfile
FROM python:latest
COPY . /me
RUN apt-get update
RUN mkdir -p /me
CMD ["python", "/me/server.py"]
EXPOSE 65456--客户Dockerfile
FROM python:latest
COPY . /you
RUN apt-get update
RUN mkdir -p /you
CMD ["python", "/you/client.py"]
EXPOSE 65456这是回波程序。
发布于 2022-11-01 23:27:22
你的密码对我有用。
你不包括你尝试过的命令。这些都是对你问题的有益补充。
建造这两个容器。我使用不同的Dockerfile名称来消除两者之间的歧义。
Q="74282751"
docker build \
--tag=${Q}:server \
--file=./Dockerfile.server \
${PWD}
docker build \
--tag=${Q}:client \
--file=./Dockerfile.client \
${PWD}然后在一个shell中,运行服务器容器,在主机端口( 65456 )上发布容器的端口65456:
docker run \
--interactive --tty --rm \
--publish=65456:65456 \
${Q}:server在另一个shell中,运行客户端容器,将容器绑定到主机的网络。这是一种提供对主机65456端口的访问的简单方法,该端口现在映射到服务器容器端口65456:
docker run \
--interactive --tty --rm \
--net=host \
${Q}:client反馈
FROM python时,您实际上是在隐式引用Docker的容器注册表。总是显式的,FROM docker.io/python:latest。在本例中,您需要考虑使用Python容器的实际最新版本(即3.9.15).WORKDIR用于定义容器中的工作目录)。这会创建和更改文件夹,并保存RUN mkdir并重复引用目标文件夹。COPYd。对于服务器来说,只有server.py而不是.,整个COPY仅用于文档。它没有效果。它只适用于服务器,因为客户端不公开代码中的硬代码常量( ports.HOST,PORT),所以作为环境变量(即HOST = os.getenv("HOST"))访问这些变量是很好的做法。这使您的代码更加灵活。一般(!)对于注定要被容器化的代码,您可以将HOST默认为localhost (或者127.0.0.1有时是localhost)FROM docker.io/python:3.9.15
RUN apt-get update
WORKDIR /me
COPY server.py .
EXPOSE 65456
CMD ["python", "/me/server.py"]https://stackoverflow.com/questions/74282751
复制相似问题