Ich habe folgendes Dockerfile für meinen Behälter:Docker Compose nicht bindet Ports
FROM centos:centos7
# Install software
RUN yum -y update && yum clean all
RUN yum install -y tar gzip wget && yum clean all
# Install io.js
RUN mkdir /root/iojs
RUN wget https://iojs.org/dist/v1.1.0/iojs-v1.1.0-linux-x64.tar.gz
RUN tar -zxvf iojs-v1.1.0-linux-x64.tar.gz -C /root/iojs
RUN rm -f iojs-v1.1.0-linux-x64.tar.gz
# add io.js to path
RUN echo "PATH=$PATH:/root/iojs/iojs-v1.1.0-linux-x64/bin" >> /root/.bashrc
# go to /src
WORKDIR /src
CMD /bin/bash
ich diesen Behälter bauen und das Bild mit docker run -i -t -p 8080:8080 -v /srv/source:/usr/src/app -w /usr/src/app --rm iojs-dev bash
starten. Docker bindet den Port 8080 an den Host-Port 8080, so dass ich von meinem Client aus auf die iojs-Anwendung zugreifen kann. Alles funktioniert gut.
Jetzt möchte ich meine Container mit Docker-compose starten, mit dem folgenden Docker-compose.yml
webfrontend:
image: iojs-dev
links:
- db
command: bash -c "iojs test.js"
ports:
- "127.0.0.1:8080:8080"
volumes:
- /srv/source:/usr/src/app
- /logs:/logs
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: 12345
Wenn ich jetzt docker-compose run webfrontend bash
laufen kann ich den Port 8080 auf meinem Host zugreifen. Kein Port wurde gebunden. Das Ergebnis docker ports
ist leer und auch das Ergebnis docker inspect
ist leer an den Port-Einstellungen:
"NetworkSettings": {
"Bridge": "docker0",
"Gateway": "172.17.42.1",
"IPAddress": "172.17.0.51",
"IPPrefixLen": 16,
"MacAddress": "02:42:ac:11:00:33",
"PortMapping": null,
"Ports": {
"8080/tcp": null
}
},
"HostConfig": {
"Binds": [
"/srv/source:/usr/src/app:rw",
"/logs:/logs:rw"
],
"CapAdd": null,
"CapDrop": null,
"ContainerIDFile": "",
"Devices": null,
"Dns": null,
"DnsSearch": null,
"ExtraHosts": null,
"Links": [
"/docker_db_1:/docker_webfrontend_run_34/db",
"/docker_db_1:/docker_webfrontend_run_34/db_1",
"/docker_db_1:/docker_webfrontend_run_34/docker_db_1"
],
"LxcConf": null,
"NetworkMode": "bridge",
"PortBindings": null,
"Privileged": false,
"PublishAllPorts": false,
"RestartPolicy": {
"MaximumRetryCount": 0,
"Name": ""
},
"SecurityOpt": null,
"VolumesFrom": []
},
Die [neueste RC-Version von 1.1.0-rc2] (https://github.com/docker/fig/releases) (sie heißt jetzt docker-compose) unterstützt das Flag '--service-ports', das bindet die Ports während 'fig run'. – dnephin
@dnephin Danke, ich wollte gerade mein benutzerdefiniertes Run-Skript aufgeben. Zu der Antwort hinzugefügt. –