当前位置: 首页 > 知识库问答 >
问题:

Docker:使用套接字在两个容器之间进行通信

方璞
2023-03-14

我有2个Docker容器:App

应用程序-包含php应用程序代码的简单容器。它仅用于存储代码并将代码传递到远程Docker主机。

应用映像Dockerfile:

FROM debian:jessie
COPY . /var/www/app/
VOLUME ["/var/www/app"]
CMD ["true"]

Web服务容器,由PHP-FPM Nginx组成。

Web image Dockerfile:

FROM nginx

# Remove default nginx configs.
RUN rm -f /etc/nginx/conf.d/*

# Install packages
RUN apt-get update && apt-get install -my \
  supervisor \
  curl \
  wget \
  php5-cli \
  php5-curl \
  php5-fpm \
  php5-gd \
  php5-memcached \
  php5-mysql \
  php5-mcrypt \
  php5-sqlite \
  php5-xdebug \
  php-apc

# Ensure that PHP5 FPM is run as root.
RUN sed -i "s/user = www-data/user = root/" /etc/php5/fpm/pool.d/www.conf
RUN sed -i "s/group = www-data/group = root/" /etc/php5/fpm/pool.d/www.conf

# Pass all docker environment
RUN sed -i '/^;clear_env = no/s/^;//' /etc/php5/fpm/pool.d/www.conf

# Add configuration files
COPY config/nginx.conf          /etc/nginx/
COPY config/default.vhost        /etc/nginx/conf.d
COPY config/supervisord.conf    /etc/supervisor/conf.d/
COPY config/php.ini             /etc/php5/fpm/conf.d/40-custom.ini

VOLUME ["/var/www", "/var/log"]

EXPOSE 80 443 9000

ENTRYPOINT ["/usr/bin/supervisord"]

我的问题:是否可以通过套接字链接Web容器和App容器?

主要原因是使用应用程序容器将更新的代码部署到远程Docker主机。使用卷/命名卷在容器之间共享代码不是一个好主意。但插座也有帮助。

非常感谢您的帮助和支持!

共有1个答案

宋涵衍
2023-03-14

如果两个容器在同一主机上运行,则可以在这两个容器之间共享套接字,因为它们是普通文件。

您可以创建一个本地docker卷并将该卷挂载到两个容器上。然后配置您的程序以使用该路径。

docker volume create --name=phpfpm
docker run phpfpm:/var/phpfpm web
docker run phpfpm:/var/phpfpm app

如果可以在主机上生成套接字,您可以将文件挂载到两个容器中。这是用于获取docker容器以控制主机docker的方法。

docker run -v /var/container/some.sock:/var/run/some.sock web
docker run -v /var/container/some.sock:/var/run/some.sock app
 类似资料:
  • 问题内容: 有两个Java文件,Server.java和Client.java。两者都放在单独的容器中。 DOCKER FILES: 我用于服务器的dockerfile(位于名为“ Server”的文件夹中)为: 客户端的dockerfile(位于名为``Client’‘的文件夹中)为: 构建容器: 使用以下容器构建容器 运行容器: 我使用命令运行图像。然后我首先运行serverimage。 我得

  • 我有三个集装箱: 前(vuejs) 服务器(nodejs) mongo(mongodb) http://server:3000/MyGetRoute 注意:此路由可以从我的浏览器通过 http://localhost:3000/mygetroute

  • 问题内容: 我正在macOS 10.12上使用Docker 1.12.5,并且正在使用我设置一个开发环境,其中包含一个 应用程序 映像和一个共享的 Redis 映像,其中包含一些预先填充的配置变量。 即使遵循了一些教程(并阅读了Mac上不可用的知识),我仍在努力连接两个容器。 我使用以下命令开始我的图像: 在我的图像中,我有: 而 从我的Mac 我可以通过连接成功命令没有问题。 但是,当我开始一个

  • 问题内容: 我想在Unix套接字上使用node-ipc在NodeJS和C程序之间进行通信,根据该主页,这是最快的选择。(它们将在同一台计算机上)。该软件包声称它可以与C程序通信。(我必须进行健全性检查)。 问题在于示例没有提供示例C代码,而且我几乎不知道如何让他们交谈。 谁能指出我一个C代码示例以匹配那些客户机/服务器示例?例如,我将如何改编本教程以在C中使用unix管道(假设我还没有完全脱离轨道

  • 问题内容: 更具体地说,如果计算机上有服务器(实例),我可以使用C#实例连接到该服务器吗? 问题答案: 主要问题是您需要非常小心发送和接收的数据的编码。这是一对可以协同工作的程序。C#客户端发送字符串,方法是首先发送其长度为整数,然后发送字符串本身的字节。Java服务器读取长度,然后读取消息并将输出打印到控制台。然后编写回显消息,计算其长度,提取字节并将其发送回C#客户端。客户端读取长度,消息并打

  • 我有两个项目,一个是aspnet核心API项目,另一个是xUnit e2e项目,两者都部署在两个不同的容器中。 一旦两个容器都启动并运行,e2e容器就会尝试在url上访问Web API项目的APIhttps://web-api-container:5010/.但e2e项目无法实现API项目。似乎无法使用其主机名访问API项目(http://web-api-container:5010/). 我的c