我正在同时开发一个服务器和它的客户端,我正在Docker容器中设计它们。我正在使用Docker Comment将它们连接起来,它在生产中工作得很好,但是我不知道如何在开发工作流中使它工作,在开发工作流中,我为每一个都运行了一个shell。
我的<代码>docker compose devel。yml:
server:
image: node:0.10
client:
image: node:0.10
links:
- server
我可以做docker compose-up-client
甚至docker compose-run-client
,但我想要的是服务器和客户端都运行一个shell,这样我就可以在迭代开发时对两者进行快速更改。
我希望能够在一个窗口中执行docker-composerun server bash
,在另一个窗口中执行docker-composerun--no-deps Client bash
。这样做的问题是没有将服务器的地址添加到客户端上的/etc/host
,因为我使用的是docker-composerun
而不是up
。
我能想到的唯一解决方案是使用docker run
并放弃Docker Comment进行开发。有没有更好的办法?
首先要提到的是,对于开发环境,您希望在应用程序启动时(在运行时)利用docker compose中的卷将其装载到容器中。很抱歉,如果你已经在做了,我提到了这一点,但是你对docker compose的定义并不清楚。yml
要回答您的具体问题-正常启动容器,然后在执行docker-composeps
时,您将看到容器的名称。例如web_server和web_client(其中web是docker-compose.yml文件或项目名称的目录)。
获得要连接到的容器的名称后,可以运行以下命令,在运行服务器的容器中运行bash:
docker exec-it web\u服务器bash
。
如果您想了解有关为相当复杂的应用程序设置开发环境的更多信息,请查看这篇关于docker compose开发的文章
我猜您的主要问题是在代码发生更改时重新启动应用程序。
就我个人而言,我在开发容器中启动我的应用程序,使用forever。
forever -w -o log/out.log -e log/err.log app.js
w
选项在代码发生更改时重新启动服务器。
我使用。foreverignore
文件以排除某些文件上的更改:
**/.tmp/**
**/views/**
**/assets/**
**/log/**
如果需要,我还可以在运行的容器中启动shell:
docker exec -it my-container-name bash
这样,您的两个应用程序可以独立重启,而不需要自己启动命令。而你有可能打开一个外壳,为所欲为。
编辑:考虑到您需要两个交互式shell,而不仅仅是在代码更改时重新启动应用程序的可能性,这是一个新的建议。
有了两个不同的应用程序,您可以为每个应用程序配置docker compose
。
服务器应用程序中的docker-compose.yml
可能包含此类信息(我为示例添加了不同类型的配置):
server:
image: node:0.10
links:
- db
ports:
- "8080:80"
volumes:
- ./src:/src
db:
image: postgres
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: dev
来自客户端应用的docker-compose.yml
可以使用external_links
来连接到服务器。
client:
image: node:0.10
external_links:
- project_server_1:server # Use "docker ps" to know the name of the server's container
ports:
- "80:80"
volumes:
- ./src:/src
然后,使用docker compose run--serviceports服务名称bash
以交互式shell启动每个配置。
或者,extra hosts
键也可以通过调用服务器应用程序调用主机上公开的端口来实现。
使用此解决方案,每个docker都可以编写。yml文件可以提交到相关应用程序的存储库中。
这是我想出的一个解决方案,这是很有技巧的;如果你能做得更好,请告诉我。
docker-compose-devel。yml
:
server:
image: node:0.10
command: sleep infinity
client:
image: node:0.10
links:
- server
在窗口1中:
docker-compose --file docker-compose-dev.yml up -d server
docker exec --interactive --tty $(docker-compose --file docker-compose-dev.yml ps -q server) bash
在窗口2中:
docker-compose --file docker-compose-dev.yml run client bash
问题内容: 我正在尝试使用python开发客户端/服务器解决方案,服务器必须使用Avahi广播服务可用性。我正在使用以下代码来发布服务: 对于客户端,我正在尝试通过以下方式搜索服务: 但是,客户端没有检测到服务何时启动。有什么想法我做错了吗? 问题答案: 我发现该代码按预期工作。我有防火墙规则阻止avahi相关的发布。
我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。 我的ssl证书位于和中,它们加载正确。运行在上的服务器 我的示例react组件。我的react应用程序运行在上。HTTPS连接良好,工作良好。 我该怎么办?也许我在中错误地使用了s
我希望能够使用浏览器作为我的android设备上的短信编辑器(类似https://www.mysms.com)。所以我开始写一个android应用程序,作为套接字服务器,并使用浏览器作为客户端(如<-我能够从那个客户端到达我的应用程序,并从它获取消息,但我现在有WebSocket握手的问题(Sec-WebSocket-Key等)。 编辑: 我按照本教程编写了我的android服务器:http://
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se
问题内容: 如果我想在我的RMI应用程序中启用“双向”通信(即,允许服务器调用客户端上的方法,以及允许客户端调用服务器上的方法),则是使客户端成为还有远程课程吗? 另外,如果我打算将客户端的实例作为方法参数传递给服务器,我是否认为不需要在rmiregistry中添加“客户端类”是正确的吗? 最后一个问题,我所有的类是否仍需要在同一位置编译?IE可以在两台完全独立的计算机上编译服务器和客户端,并期望
问题内容: 我尝试使用以下代码从服务器到客户端发送文件和目录列表。服务器正在从客户端接收消息,但我不知道服务器是否没有发送回结果或客户端是否不接受结果。 服务器端: 问题答案: 据我所见,您在客户端上做的同时在服务器上做。从服务器发送的字符串中没有行尾字符,因此客户端将永远无法完成。执行outqw.println()或添加到要发送的内容的末尾。话虽这么说,很难用一堆注释掉的东西来浏览未格式化的代码