Docker-Psiturk的端口转发不起作用

问题描述

我是docker的新手,被困在正确暴露psiturk的端口上。

我有一个docker-compose.yml文件,该文件创建了psiturk容器,Nginx容器,管理员容器和MysqL容器。我正在尝试在mTurk上的沙盒模式下运行psiturk实验。服务器无法连接。我已经暴露了端口。当我在Docker之外运行psiturk时,我可以在沙箱中运行一个实验,因此它不是我计算机的防火墙。

我听说过发布公开的端口,并尝试通过添加以下内容来实现:

ports:
     - 22362:22362

到psiturk容器,但是没有用。

对于我的docker-compose.yml文件

version: '3'

services:

  psiturk:
    container_name: my-experiment
    build: .
    volumes:
      - ./exp:/exp
    tty: true
    stdin_open: true
    restart: unless-stopped

  Nginx:
    container_name: my-experiment-Nginx
    image: Nginx:latest
    ports:
      - 80:80
    volumes:
      - ./exp:/var/www/exp:ro
      - ./default.conf:/etc/Nginx/conf.d/default.conf
    restart: unless-stopped

  db:
    container_name: my-experiment-db
    image: MysqL:5.7
    volumes:
      - ./data/db:/var/lib/MysqL
    environment:
      MysqL_ROOT_PASSWORD: anothersafepassword
      MysqL_DATABASE: shared4data
      MysqL_USER: jorja
      MysqL_PASSWORD: totallysafepassword
    restart: unless-stopped

  adminer:
    container_name: my-experiment-adminer
    image: adminer:latest
    ports:
      - 127.0.0.1:8080:8080

对于我的dockerfile:

FROM python:3.6-stretch

LABEL maintainer="Jorja Shires <[email protected]>" version="1.0"

ENV PSITURK_GLOBAL_CONfig_LOCATION "/exp"

workdir "/exp"

RUN pip install \
        psiturk==2.3.8 \
        pyMysqL==0.10.0 \
        python-Levenshtein==0.12.0 \
    && rm -rf ~/.cache/pip

CMD ["bash"]

EXPOSE 22362
EXPOSE 80

对于我的psiturk配置文件

[Server Parameters]
host = 0.0.0
port = 22362
cutoff_time = 30
logfile = server.log
loglevel = 2
debug = true
threads = auto
adserver_revproxy_host = MyStaticIPAddress
adserver_revproxy_port = 80 

[Shell Parameters]
launch_in_sandBox_mode = true
#bonus_message = "Thanks for participating!"
use_psiturk_ad_server = true
ad_location = false

解决方法

哦,嘿,您好像在使用我的实验模板:https://github.com/paxtonfitzpatrick/psiturk-experiment-template

我认为这里有两个问题:

  1. 在您的 exp/config.txt 文件中,“host”字段为 0.0.0,但应为 0.0.0.0

  2. 几个月前对 psiTurk Python 包和 psiTurk 广告服务器(托管您的 ad.html)进行了更新,这破坏了许多现有的实验设置。特别是,根据 psiTurk README:

    由于 psiturk 广告服务器的托管服务提供商实施的更改,低于 v2.3.12 的版本将无法发布 HIT。

    因此安装在您的 Dockerfile (2.3.8) 中的 psiTurk 版本将不再有效。我会尽快更新实验模板库,但从当前版本升级的一般步骤是:

    • 在您的 Dockerfile 中,将 psiturk==2.3.8 替换为 psiturk==2.3.12
    • 删除来自exp/templates/ad.html所有评论(无论出于何种原因,它们都会导致更新后的广告服务器出现问题)
    • config.txt 中,在 [Shell Parameters] 下,确保 use_psiturk_ad_server 显式设置为 true 并且 ad_location 显式设置为 false立>

还值得注意的是 psiTurk v3.0 已经完全放弃了对 psiturk.org 广告服务器的支持,因此在未来的某个时间点,psiTurk 维护人员可能会停止管理它,而您将必须设置您自己的广告服务器 (the docs recommend Heroku)。但是现在(希望还有一段时间!)上述步骤应该足够了。