小编Svi*_*len的帖子

连接到本地主机上 Docker 容器中的服务器非常慢

我想尝试使用 Docker 作为本地开发工具 \xe2\x80\x94 我曾经docker-compose启动 3 个容器:一个用于数据库(postgres)、前端(在监视模式下运行 webpack 和 Node sass)和后端(Elixir /凤凰)。

\n\n

一切都很好,除了当我点击localhost:4000页面加载速度非常慢 \xe2\x80\x94 10-15 秒只是为了获取静态的登录页面。

\n\n

我检查了日志docker-compose,服务器响应时间像平常一样快,这对我来说意味着某些东西正在减慢与容器的连接。

\n\n

当我再次直接在终端中运行服务器时,一切都非常快,例如加载同一页面需要 1 秒。

\n\n

我是 Docker 新手,所以我怀疑我可能缺少一些配置方面的东西。任何想法表示赞赏。谢谢你!

\n\n

配置

\n\n

docker-compose.yml

\n\n
version: "3.6"\n\nservices:\n  postgres:\n    container_name: postgres\n    image: postgres:11.0-alpine\n    ports:\n      - 5432:5432\n    volumes:\n      - postgres:/var/lib/postgresql/data\n\n  front-end:\n    container_name: front-end\n    env_file:\n      - "docker/dev/.env"\n    build:\n      context: "."\n      dockerfile: "docker/dev/Dockerfile.front-end"\n    volumes:\n      - .:/app\n      - node_modules:/app/node_modules\n      - static:/app/priv/static\n    command: npm run dev\n\n  backend:\n    container_name: backend\n    build:\n      context: "."\n      dockerfile: …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

5
推荐指数
1
解决办法
9873
查看次数

ChromeDriver on Alpine bind() 返回错误,errno=0:地址不可用 (99)

我只是想chromedriver在 Alpine docker 容器中运行,但我不断收到此错误:

Starting ChromeDriver 72.0.3626.121 on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1560858426.290][SEVERE]: bind() returned an error, errno=0: Address not available (99)
[1560858426.290][INFO]: listen on IPv6 failed with error ERR_ADDRESS_INVALID
Run Code Online (Sandbox Code Playgroud)

Dockerfile 很简单

FROM alpine:3.9

RUN apk --no-cache --update add chromium chromium-chromedriver

EXPOSE 9515

CMD chromedriver --verbose
Run Code Online (Sandbox Code Playgroud)

我正在尝试将它与其他容器一起使用,因此docker-compose.yml这是有用的相关部分:

version: "3.6"

services:
  chromedriver:
    container_name: chromedriver
    build:
      context: "."
      dockerfile: …
Run Code Online (Sandbox Code Playgroud)

selenium-chromedriver docker alpine-linux

5
推荐指数
0
解决办法
637
查看次数

Elixir/Phoenix Channels 的 Heroku H15 错误

一旦我开始在 Phoenix 上使用 Channels,我就开始在 Heroku 上遇到很多这样的错误:

heroku[router]: at=error code=H15 desc="Idle connection" method=GET
path="/socket/websocket?guardian_token=eyJhbGciOiJIUz[...]&vsn=1.0.0" host=[...]
dyno=web.1 connect=0ms service=87803ms status=503 bytes=
Run Code Online (Sandbox Code Playgroud)

重现这一点的可靠方法是在笔记本电脑上:

  1. 打开一个连接到 WebSockets 的 Phoenix 页面
  2. 合上笔记本电脑的盖子
  3. 等待一分钟左右(WiFi 断开连接/操作系统进入睡眠状态)
  4. 将发生 H15 错误。

我已经在我的 UserChannel 上设置了 45 秒的超时时间;我正在运行 Elixir 1.4.2,Phoenix1.2.1并且我phoenix.js刚刚升级到 Phoenix 中使用的那个1.3.0-rc0链接到 rev

我可以看到前端记录的错误,但之后它愉快地重新连接到后端:

2017-03-04 23:28:55.351 receive: ok user:2 phx_reply (3)
2017-03-04 23:29:24.269 channel: error user:2
2017-03-04 23:29:28.713 push: user:2 phx_join (4)
2017-03-04 23:29:28.745 receive: ok user:2 phx_reply (4)
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助或想法如何解决这个问题。

编辑:我熟悉 Heroku …

heroku elixir phoenix-framework phoenix-channels

4
推荐指数
1
解决办法
368
查看次数

如果子级达到max_restarts,则阻止DynamicSupervisor关闭

我有一个DynamicSupervisor开始孩子的restart: :transient.默认情况下,如果子项异常退出,则主管将重新启动它.

但是,按照设计,如果孩子在3次重启后失败,主管本身将退出.来自文档:

https://hexdocs.pm/elixir/Supervisor.html#module-exit-reasons-and-restarts

Notice that supervisor that reached maximum restart intensity will exit 
with :shutdown reason. In this case the supervisor will only be restarted
if its child specification was defined with the :restart option set to :permanent
(the default).
Run Code Online (Sandbox Code Playgroud)

由于杀死主管也会杀死其他孩子(正在进行的后台工作),我想避免这种情况.

问题是:到达后max_restarts,我怎样才能杀死失败的子进程,保留主管及其他孩子?

使用Elixir 1.6/OTP 20.

更新:在StackOverflow上找到了这个答案,它基本上表明顶级DynamicSupervisor为每个孩子启动一个DynamicSupervisor; 顶级将用restart: :permanent或启动儿童监督员:temporary.这是一个很好的解决方法,但如果有另一个解决方案,我会感兴趣.

elixir erlang-otp

4
推荐指数
1
解决办法
530
查看次数