无法通过dockerized Traefik访问dockerized Neo4j Web界面

时间:2018-07-17 08:53:46

标签: docker neo4j reverse-proxy traefik

我正在尝试通过 traefik 作为反向代理访问经过docker化的 neo4j 实例的Web界面。

我可以通过导航到myDomain.demo:7479/browser来访问neo4j-instance的Web界面。但是,我希望能够仅通过导航到myDomain.demo/neo4j/myNeo来达到此目的,因此在同一台计算机上使用多个neo4j实例时,我不必记住端口号。 遗憾的是,我无法以这种方式访问​​网络界面,而是显示了一个空白页面,该页面要求我提供凭据。我猜这至少是一个好兆头,因为通常在访问Web界面时,我必须将db凭据输入到GUI掩码中才能连接到neo4j-db。但是,它看起来应该像this,而不是我看到的简单的浏览器弹出窗口。

Cleary我不能成为第一个尝试在反向代理后面访问多个neo4j实例及其对应的Web界面的人,但是我不能全神贯注于如何做到这一点。这是我的设置命令:

Dockerized Traefik代理

docker run --name proxy -p 80:80 -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock \
traefik \
--api --loglevel=debug --entryPoints="Name:http  Address::80" \
--docker --docker.endpoint="unix://var/run/docker.sock"

Dockerized Neo4j实例(无需代理即可正常运行)

docker run --name myNeo -d --publish=7479:7474 --publish=7701:7687 \
--label traefik.frontend.rule="Host:myDomain.demo;Path:/neo4j/myNeo" \
--label traefik.backend=myNeo \
--label traefik.port=7474 \
neo4j:latest

(为简单起见,我在neo4j-docker命令中删除了多个卷分配。)

我注意到,手动导航到myDomain.demo:7479时,我被重定向到myDomain.demo:7479/browser。也许Traefic无法处理该重定向,这就是为什么为我提供没有错误的空白页的原因?

谢谢。

1 个答案:

答案 0 :(得分:1)

三件事:

  1. const styles = theme => ({ root: { width: '100%', marginTop: theme.spacing.unit * 3 }, table: {}, tableWrapper: { overflowX: 'auto' } }); 规则仅是完全匹配。 <Paper className={classes.root}> <EnhancedTableToolbar numSelected={selected.length} tableTitle={'Accounts'} > <AccountFilterList /> </EnhancedTableToolbar> <div className={classes.tableWrapper}> <Table className={classes.table} aria-labelledby='tableTitle'> <EnhancedTableHead numSelected={selected.length} order={order} orderBy={orderBy} onSelectAllClick={this.handleSelectAllClick} onRequestSort={this.handleRequestSort} rowCount={data.length} columnData={columnData} /> <TableBody> {data .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) .map(n => { const isSelected = this.isSelected(n.ref); return ( <TableRow hover onClick={event => this.handleRowClick(event, n.ref)} role='checkbox' aria-checked={isSelected} tabIndex={-1} key={n.ref} selected={isSelected} > <TableCell padding='checkbox'> <Checkbox checked={isSelected} onChange={event => this.handleClick(event, n.ref)} /> </TableCell> <TableCell> <Avatar alt={n.name} src={`//logo.clearbit.com/${n.clearBit}`} onError={e => { e.target.src = 'https://doxhze3l6s7v9.cloudfront.net/app/static/img/company-default-img.png'; }} /> </TableCell> <TableCell>{n.name}</TableCell> <TableCell>{n.owner}</TableCell> <TableCell numeric>{n.dateCreated}</TableCell> </TableRow> ); })} {emptyRows > 0 && ( <TableRow style={{ height: 49 * emptyRows }}> <TableCell colSpan={6} /> </TableRow> )} </TableBody> </Table> </div> <TablePagination component='div' count={data.length} rowsPerPage={rowsPerPage} page={page} backIconButtonProps={{ 'aria-label': 'Previous Page' }} nextIconButtonProps={{ 'aria-label': 'Next Page' }} onChangePage={this.handleChangePage} onChangeRowsPerPage={this.handleChangeRowsPerPage} /> </Paper> 将匹配Path,但不匹配Path:/example。您可能想改用/example
  2. 如果您无法运行/example/bacon,则将无法使用子目录进行路由。您需要配置您的应用程序以侦听子路径。 Neo4j需要知道其路径,以便它可以生成链接等。
  3. 一旦可以使neo4j在子路径上工作,就可以使用traefik路由到自定义域/端口。