У нас странная проблема с php.
У нас есть док-контейнер, который запускает наш код для локальных целей разработки, и мы развертываем этот контейнер в среде ранчера для принятия и производства.
У нас есть следующая привычка проверять, существует ли ключ в ассоциативном массиве:
try {
$value = $someArray['does']['this']['exist'];
} catch (\Exception $e) {
// No it didn't, do something else
$value = 'fallback';
}
Это всего лишь ярлык, который предотвращает необходимость проверки наличия всех этих ключей.
Это прекрасно работает в нашей локальной среде разработки. Но не тогда, когда он развернут в нашей среде принятия или производства. Это никогда не достигнет выгоды. В этом случае $value
будет нулевым.
Почему один и тот же докер-контейнер ведет себя по-разному при его развертывании?
РЕДАКТИРОВАТЬ (добавлен docker-compose info)
# docker/docker-compose.yml
version: "2"
services:
api-tools:
container_name: api-tools
image: bizz-registry.githost.io/neon/api-tools:acceptance
env_file: [".env"]
ports:
- 8005:80
environment:
SYMFONY_DEBUG: "true"
SYMFONY_ENV: "dev"
restart: on-failure:10
volumes:
- .:/opt/webapp:cached
- ./web/app_dev.php:/opt/webapp/web/app.php
- ./docker/vhost.conf:/etc/apache2/sites-available/000-default.conf
- ./docker/development/development.override:/etc/apache2/sites-available/development.override
- ./docker/development/development.opcache.override:/etc/php/7.1/fpm/conf.d/tweak-opcache.ini
working_dir: "/opt/webapp"
external_links: [ mysql ]
command: "/usr/bin/env php -d open_basedir= vendor/phing/phing/bin/phing setup run"
Это то, что setup
называет:
<target name="setup">
<exec command="php ${project.basedir}/bin/console cache:warmup --env=prod" passthru="true" checkreturn="true" />
</target>
Это то, что run
называет:
<target name="run">
<exec command="/opt/start.sh" passthru="true" checkreturn="true" />
<exec command="/usr/sbin/apache2ctl -D FOREGROUND" passthru="true" checkreturn="true" />
</target>