Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets Docker:使用套接字在两个容器之间进行通信_Sockets_Deployment_Docker_Docker Container - Fatal编程技术网

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

Sockets Docker:使用套接字在两个容器之间进行通信,sockets,deployment,docker,docker-container,Sockets,Deployment,Docker,Docker Container,我有两个Docker容器:应用程序和Web App-包含php应用程序代码的简单容器。它仅用于存储代码并将代码传送到远程Docker主机 应用程序映像文档: FROM debian:jessie COPY . /var/www/app/ VOLUME ["/var/www/app"] CMD ["true"] FROM nginx # Remove default nginx configs. RUN rm -f /etc/nginx/conf.d/* # Install packages

我有两个Docker容器:应用程序和Web

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

应用程序映像文档:

FROM debian:jessie
COPY . /var/www/app/
VOLUME ["/var/www/app"]
CMD ["true"]
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
-Web服务容器,由PHP-FPM+Nginx组成

Web图像文档:

FROM debian:jessie
COPY . /var/www/app/
VOLUME ["/var/www/app"]
CMD ["true"]
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容器和应用程序容器

主要原因是使用应用程序容器将更新的代码部署到远程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

我相信您可以在卷内放置一个插座来共享它。您甚至可以将其作为主机上的单个文件并作为卷共享。非常感谢您的回答!马特,非常感谢你的回答!我做到了。但我不完全理解Web容器如何通过位于公共卷中的soket从App容器访问文件。来自容器Web的FPM如何知道文件位于App container中的指定文件夹中?很抱歉问了我这个愚蠢的问题,但我不熟悉通过套接字进行数据交换。我真的很想理解这个问题。共享一个套接字只允许两者之间的通信。因此fpm监听套接字,nginx通过套接字向fpm发送请求。网站的任何文件都需要在web容器中。php应用程序的任何文件都需要位于应用程序容器中。你想感谢你的帮助吗!我正在尝试在一个单独的容器应用程序中创建一个站点代码。并将其链接到nginx+fpm容器Web。不使用卷。i、 例如,仅使用nginx+phpfpm的Web容器。没有任何网站代码。只有web服务器和解释器。应用程序-仅包含站点数据的容器:php、html、css、js。仅适用于配送和门店代码。我需要它来进一步部署过程:-重建图像和容器仅与网站代码(应用程序)-交付给Docker主机,并将旧应用程序更改为新应用程序。